我在更新100个表时遇到问题。问题如下:
我必须在100个表中更新299列,为此我必须创建一个oracle过程。我创建了一个包含两列的表,其中我存储了表名和列。例如:
lookup_table:------
table_name column_name
现在我要做的是选择每一行并根据表名更新cols,因此我需要使用table_name和column_name作为变量。
如果有人在这种情况下工作,请告诉我。
答案 0 :(得分:0)
对于此类动态操作,您需要(ab)在 PL / SQL 中使用 EXECUTE IMMEDIATE 。在SQL中,您不能使用动态对象名称,它必须是静态。
我建议在 SQL 中执行此操作并准备所需的更新语句。使用优秀的文本编辑器不应该是一项艰巨的任务。
但是,如果您仍想在PL / SQL中执行此操作,则需要首先动态构建sql语句,然后使用 EXECUTE IMMEDIATE
。
例如,
SQL> set serveroutput on
SQL> DECLARE
2 var_sql VARCHAR2(1000);
3 var_tab VARCHAR2(10);
4 var_ename VARCHAR2(10);
5 BEGIN
6 var_tab:= 'EMP';
7 var_sql :='SELECT empno FROM '||var_tab||' WHERE empno=7369';
8 EXECUTE IMMEDIATE var_sql INTO var_ename;
9 DBMS_OUTPUT.PUT_LINE('Employee name is '||var_ename);
10 END;
11 /
Employee name is 7369
PL/SQL procedure successfully completed.
SQL>