问题描述
我想在/ home / work等位置动态生成多个插入sql文件。select查询在日期字段中也进行了一些转换。
create table orders (order_id number,order_name varchar2(10),ord_dt date);
create table ar_orders (order_id number,ord_dt date);
create table sales (sales_id number,prod_cd varchar2(10),sales_dt date);
create table ar_sales (sales_id number,sales_dt date);
-
ar_orders_insert.sql
prompt TruncATE AR_ORDERS TABLE truncate table AR_ORDERS; prompt insert INTO AR_ORDERS insert /*+ append */ into AR_ORDERS (order_id,order_name,ord_dt ) select a.order_id,b.order_name,coalesce(to_date(b.ord_dt,'YYYYMM'),a.ord_dt) from orders a,ref_tab b where b.order_id = a.order_id; commit; insert /*+ append */ into AR_ORDERS (order_id,ord_dt ) select a.order_id,a.order_name,a.ord_dt from orders a,AR_ORDERS b where b.order_id = a.order_id;
提交;
-
ar_sales_insert.sql:类似上述的插入sql。
prompt TruncATE ar_sales TABLE truncate table ar_sales; prompt INSERT INTO ar_sales insert into ar_sales (sales_id,prod_cd,sales_dt ) select a.sales_id,b.prod_cd,coalesce(to_date(b.sales_dt,a.sales_dt) from sales a,ref_tab b where b.sales_id = a.sales_id; commit; insert /*+ append */ into ar_sales (sales_id,sales_dt ) select a.sales_id,a.prod_cd,a.sales_dt from sales a,ar_sales b where b.sales_id = a.sales_id; commit;
我正在尝试这样做,但看起来我走错了方向。我需要为其生成sql文件的许多表。我仅创建了两个表进行演示。
SET SERVEROUTPUT ON ;
DECLARE
v_select_qry varchar2(32767);
v_insert_qry varchar2(32767);
v_ar_tab varchar2(50) := 'REF_TAB b';
v_from_str varchar2(2000);
v_where_str varchar2(3000);
v_str varchar2(2000);
BEGIN
FOR i IN (
SELECT OWNER,TABLE_NAME FROM ALL_TABLES WHERE TABLE_NAME LIKE 'AR_ORD%')
loop
DBMS_OUTPUT.PUT_LINE('PROMPT: TruncATE AR_ORDERS TABLE');
DBMS_OUTPUT.PUT_LINE('PROMPT: INSERT INTO AR_ORDERS');
v_str := 'truncate table ' || i.TABLE_NAME;
v_from_str := 'FROM '||i.TABLE_NAME ||' a,'||chr(10)|| v_ar_tab;
v_where_str := 'WHERE b.order_id = a.order_id; ';
FOR K in (select column_name from ALL_TAB_COLUMNS where table_name = i.table_name and OWNER = i.OWNER order by column_id)
loop
DBMS_OUTPUT.PUT_LINE(k.column_name);
DBMS_OUTPUT.PUT_LINE(v_from_str);
DBMS_OUTPUT.PUT_LINE(v_where_str);
END LOOP;
END LOOP;
END ;
/
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)