如何解决在oracle中动态生成多个sql脚本
我想在/ 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);
预期的sql文件:
-
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 举报,一经查实,本站将立刻删除。