【问题标题】:dynamic procedure in oracleoracle中的动态过程
【发布时间】:2020-10-08 23:56:41
【问题描述】:

我想使用动态过程。 数据将根据我给出的表名从一个表发送到另一个表。 我知道不能这样写。 我该如何克服这个问题?

create or replace PROCEDURE personelleri_getir (table_name_source varchar2,limit_in number,table_name_target varchar2)
IS
  CURSOR cur_1 IS
 SELECT * FROM table_name_source where rownum<limit_in;
TYPE fetch_1 IS TABLE OF cur_1%ROWTYPE;
v_1 fetch_1;
BEGIN
 OPEN cur_1;
 LOOP
 FETCH cur_1 BULK COLLECT INTO v_1 LIMIT 10000;

FORALL i IN 1..v_1.COUNT
 INSERT INTO table_name_target VALUES v_1(i);

EXIT WHEN cur_1%NOTFOUND;
 END LOOP;
 CLOSE cur_1;

COMMIT;

EXCEPTION
 WHEN NO_DATA_FOUND THEN
 DBMS_OUTPUT.put_line (SQLERRM);
 WHEN OTHERS THEN
 DBMS_OUTPUT.put_line (SQLERRM);

END;

execute  personelleri_getir('cars',100000,'cars2')

【问题讨论】:

    标签: oracle plsql oracle11g oracle10g


    【解决方案1】:

    所以,您想在描述匹配的两个表之间复制数据,对吗?如果是这样,你有点过于复杂了。这是一个更简单的例子。

    先测试用例:

    SQL> create table cars1 as select * From dept;
    
    Table created.
    
    SQL> create table cars2 as select * From dept where 1 = 2;
    
    Table created.
    
    SQL> select * from cars1;
    
        DEPTNO DNAME          LOC
    ---------- -------------- -------------
            10 ACCOUNTING     NEW YORK
            20 RESEARCH       DALLAS
            30 SALES          CHICAGO
            40 OPERATIONS     BOSTON
    
    SQL> select * From cars2;
    
    no rows selected
    

    程序:

    SQL> create or replace procedure pers (tsource in varchar2, ttarget in varchar2) is
      2  begin
      3    execute immediate 'insert into '    || dbms_assert.sql_object_name(ttarget) ||
      4                      ' select * from ' || dbms_assert.sql_object_name(tsource);
      5  end;
      6  /
    
    Procedure created.
    

    测试:

    SQL> exec pers('cars1', 'cars2');
    
    PL/SQL procedure successfully completed.
    
    SQL> select * from cars2;
    
        DEPTNO DNAME          LOC
    ---------- -------------- -------------
            10 ACCOUNTING     NEW YORK
            20 RESEARCH       DALLAS
            30 SALES          CHICAGO
            40 OPERATIONS     BOSTON
    
    SQL>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-23
      • 2017-06-19
      • 2012-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多