oracle存盤程序里面能不能用||把插入陳述句和查詢陳述句連接起來?比如:vsqls:=str_1||tab_record.vsql(str_1是一個插入陳述句,而tab_record.vsql是一個查詢陳述句,查詢結果為多欄位多行值)。
uj5u.com熱心網友回復:
沒看懂這是什么需求,說細說說吧。uj5u.com熱心網友回復:
str_1:='INSERT INTO RULE_WT(SYS_NAME,TABLE_NAME,COL_NAME,ABBR,INTEGRITY_SIZE,REGULAR_SIZE)';tab_record.vsql是一條查詢陳述句,例如:select '規劃計劃', 'YJ_GJLC_SJKB_XXHXMLC', '綜合計劃下達時間', pr_abbr_name, count(*) from YJ_GJLC_SJKB_XXHXMLC where ( to_char("綜合計劃下達時間", 'yyyy-mm-dd' ) not between '1950-01-01' and to_char( sysdate, 'yyyy-mm-dd' ) ) group by pr_abbr_name,執行的結果就對應str_1中的幾個欄位,現在我想vsqls:=str_1||tab_record.vsql,然后execute immediate vsqls就能把vsql中的內容插入到str_1中了,以前這樣寫是可以的,今天嘗試呼叫存盤程序時報了一個無效的關系運算子的錯,很是郁悶。
uj5u.com熱心網友回復:
insert into table1 select * from table2是合法的把具體報錯陳述句貼出來看看
uj5u.com熱心網友回復:



呼叫存盤程序時報錯,無效的關系運算子也只能是||出錯了,但是||不算關系運算子吧
uj5u.com熱心網友回復:
把報錯的那個拼接字串vsqls完整展現一下圖片不完整
uj5u.com熱心網友回復:


圖一是一條vsql陳述句查詢出來的結果,圖二是報錯行
vsqls:=' INSERT INTO RULE_WT( SYS_NAME, TABLE_NAME, COL_NAME, ABBR, INTEGRITY_SIZE, REGULAR_SIZE) ' || ' select 'PMS', 'yj_gjlc_sjkb_scjglc', 'organization', pr_abbr_name, count(*), 0 from yj_gjlc_sjkb_scjglc where organization is null group by pr_abbr_name '
uj5u.com熱心網友回復:
從陳述句上來看沒什么問題,這條陳述句單獨執行會報錯嗎?uj5u.com熱心網友回復:
程式中不是有dbms_output.put_line嗎?看看回傳的vsqls值是什么?你寫的并不是實際值,而是自己寫的
uj5u.com熱心網友回復:
你寫的陳述句有問題,沒有轉換單引號uj5u.com熱心網友回復:
呼叫存盤程序就報了那個錯,并沒有輸出vsqls,以前就是這樣寫的沒有錯,單引號不需要再轉了,上周遷移了一下庫,就開始出現這個錯誤了,但是也不應該啊,資料都是完好的,不可能插不進去的啊。
這張圖是本月上旬插入的資料,存盤程序并沒有改變,只是凈報錯了。
uj5u.com熱心網友回復:
所以需要看程式中vsqls的實際值是什么你的' select 'PMS', 'yj_gjlc_sjkb_scjglc', 'organization'這個寫法明顯不對
output視窗里面會顯示的,程式里面不是有dbms_output.put_line(vsqls)嗎?
uj5u.com熱心網友回復:
select 'PMS', 'yj_gjlc_sjkb_scjglc', 'organization'就是要這么寫的,取值就是它們自己,至于vsqls確實是沒有輸出列印,只有一個報錯,愁得我頭發都掉光了uj5u.com熱心網友回復:
如果能提供一套建表陳述句和測驗資料來重現你現在的問題,應該很快就能解決。uj5u.com熱心網友回復:
現在的問題在于 :' select 'PMS', 'yj_gjlc_sjkb_scjglc', 'organization' 這不是個字串,中間有若干個單引號而沒有拼接符,所以需要知道真實的VSQLS。如果不會OUTPUT,你可以建一個表,把VSQLS插入并提交,然后查詢這張表,把結果貼出來
uj5u.com熱心網友回復:
CREATETABLE
DSQLS AS SELECT
t.system,
t.table_name,
t.col_abbr,
'1' RULE,
'select ' || '''' || t.system || ''',' || '''' || t.table_name || ''',' || '''' || t.col_name || ''',' || t.col_abbr || ',count(*),' || '0 from ' || t.table_name || ' where ' || t.integrity_rule_context || ' group by ' || t.col_abbr || ' ' vsql
FROM
rule_database t
WHERE
t.integrity_rule_context IS NOT NULL;
INSERT
INTO
DSQLS (system,
TABLE_NAME,
COL_ABBR,
RULE,
VSQL)(
SELECT
t.system,
t.table_name,
t.col_abbr,
'2',
'select ' || '''' || t.system || ''',' || '''' || t.table_name || ''',' || '''' || t.col_name || ''',' || t.col_abbr ||'0'|| ',count(*) from ' || t.table_name || ' where ' || t.REGULAR_RULE_CONTEXT || ' group by ' || t.col_abbr || ' '
FROM
rule_database t
WHERE
t.REGULAR_RULE_CONTEXT IS NOT NULL);
dsqls表資料如下圖

uj5u.com熱心網友回復:
INSERT INTO RULE_WT(SYS_NAME,TABLE_NAME,COL_NAME,ABBR,INTEGRITY_SIZE,REGULAR_SIZE)select 'ERP','yj_gjlc_sjkb_scjglc','proj_create_date',pr_abbr_name,count(*),0 from yj_gjlc_sjkb_scjglc where ((pur_app_date is not null or cont_sign_date is not null or mat_arri_date is not null or proj_oper_date is not null or proj_settlements_date is not null or proj_final_date is not null or proj_close_date is not null ) and proj_create_date is null) group by pr_abbr_nameINSERT INTO RULE_WT(SYS_NAME,TABLE_NAME,COL_NAME,ABBR,INTEGRITY_SIZE,REGULAR_SIZE)select 'PMS','yj_gjlc_sjkb_scjglc','pr_abbr_name',pr_abbr_name,count(*),0 from yj_gjlc_sjkb_scjglc where pr_abbr_name is null group by pr_abbr_name
INSERT INTO RULE_WT(SYS_NAME,TABLE_NAME,COL_NAME,ABBR,INTEGRITY_SIZE,REGULAR_SIZE)select 'PMS','yj_gjlc_sjkb_scjglc','city_abbr_name',pr_abbr_name,count(*),0 from yj_gjlc_sjkb_scjglc where city_abbr_name is null group by pr_abbr_name
INSERT INTO RULE_WT(SYS_NAME,TABLE_NAME,COL_NAME,ABBR,INTEGRITY_SIZE,REGULAR_SIZE)select 'PMS','yj_gjlc_sjkb_scjglc','organization',pr_abbr_name,count(*),0 from yj_gjlc_sjkb_scjglc where organization is null group by pr_abbr_name
INSERT INTO RULE_WT(SYS_NAME,TABLE_NAME,COL_NAME,ABBR,INTEGRITY_SIZE,REGULAR_SIZE)select 'PMS','yj_gjlc_sjkb_scjglc','proj_code',pr_abbr_name,count(*),0 from yj_gjlc_sjkb_scjglc where proj_code is null group by pr_abbr_name
INSERT INTO RULE_WT(SYS_NAME,TABLE_NAME,COL_NAME,ABBR,INTEGRITY_SIZE,REGULAR_SIZE)select 'PMS','yj_gjlc_sjkb_scjglc','proj_name',pr_abbr_name,count(*),0 from yj_gjlc_sjkb_scjglc where proj_name is null group by pr_abbr_name
INSERT INTO RULE_WT(SYS_NAME,TABLE_NAME,COL_NAME,ABBR,INTEGRITY_SIZE,REGULAR_SIZE)select 'PMS','yj_gjlc_sjkb_scjglc','professional_subdivision',pr_abbr_name,count(*),0 from yj_gjlc_sjkb_scjglc where professional_subdivision is null group by pr_abbr_name
INSERT INTO RULE_WT(SYS_NAME,TABLE_NAME,COL_NAME,ABBR,INTEGRITY_SIZE,REGULAR_SIZE)select 'ERP','yj_gjlc_sjkb_scjglc','pur_app_date',pr_abbr_name,count(*),0 from yj_gjlc_sjkb_scjglc where ((cont_sign_date is not null or mat_arri_date is not null or proj_oper_date is not null or proj_settlements_date is not null or proj_final_date is not null or proj_close_date is not null) and pur_app_date is null) group by pr_abbr_name
INSERT INTO RULE_WT(SYS_NAME,TABLE_NAME,COL_NAME,ABBR,INTEGRITY_SIZE,REGULAR_SIZE)select 'ERP','yj_gjlc_sjkb_scjglc','cont_sign_date',pr_abbr_name,count(*),0 from yj_gjlc_sjkb_scjglc where ((mat_arri_date is not null or proj_oper_date is not null or proj_settlements_date is not null or proj_final_date is not null or proj_close_date is not null ) and cont_sign_dateis null) group by pr_abbr_name
uj5u.com熱心網友回復:
汗。。。表rule_database是什么?uj5u.com熱心網友回復:
rule_database是一個規則表,里面table_name欄位里面存盤的是119張表的表名,通過表名可以查到表內欄位資訊。uj5u.com熱心網友回復:
要解決你的問題,我們需要在自己的機器上重現,如果你不提供完整的測驗表結構和資料,我們無法測驗,也就無法解決問題。請把RULE_DATABASE表結構和資料也發上來。或者干脆你自己發個完整的簡化測驗表和資料
uj5u.com熱心網友回復:
是不是就是先插入,再查詢,這樣的話,分開執行非常簡單,如果要回滾,就加事務uj5u.com熱心網友回復:
黑蘋果mac Mojave10.14 安裝NVIDIA 顯卡驅動教程,試試看uj5u.com熱心網友回復:
哥們說說到底想要設么樣的結果集,或者只是單純的查詢后插入,后者三樓就可以了uj5u.com熱心網友回復:
分開執行多方便uj5u.com熱心網友回復:
先插入然后選擇就不會報錯了uj5u.com熱心網友回復:
區github 下載原版轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/57096.html
標籤:開發
上一篇:求個ORACLE 備份和恢復的 教程 視頻的最好 跪求
下一篇:win7下docker鏡像
