如何将表名分配给变量并使用相同的内部立即执行语句

时间:2014-01-29 07:54:22

标签: oracle stored-procedures plsql dynamic-sql

我正在尝试将表名分配给变量并使用相同的内部执行立即语句,请帮我处理执行语句中的语法

场景是

我试图将一个表名作为参数传递给程序,并在execute immediate中使用它们写入其他表。

请建议我参数和执行立即声明的语法。

我的程序:

CREATE OR REPLACE PROCEDURE tep
AS
  v_sql VARCHAR2(1024) ;
  a     NUMBER;
  b     VARCHAR2(30) :='t_stg1_non_silicon_purchace_re';
BEGIN
  v_sql := q'[SELECT COUNT(*) FROM b ]';
  EXECUTE immediate v_sql INTO a;
  DBMS_OUTPUT.PUT_LINE( TO_CHAR(v_sql));
  DBMS_OUTPUT.PUT_LINE( TO_CHAR(a));
END;
/

2 个答案:

答案 0 :(得分:0)

您还没有在execute immediate中指定您想要对表名执行什么操作,请参阅下面的示例“如何”创建表。

DECLARE 
vTableName VARCHAR2(40 CHAR);
vSQL VARCHAR2(1000 CHAR);
BEGIN
    vTableName:='MY_TABLE_NAME';
    vSQL:='CREATE TABLE ' || vTableName || ' (COL1 NUMBER, COL2 NUMBER)';
    EXECUTE IMMEDIATE vSQL;
END;
/

答案 1 :(得分:0)

This query may satisfy your requirement. Thanks

    CREATE OR REPLACE PROCEDURE tep
    AS
      v_sql VARCHAR2(1024) ;
      a     NUMBER;
      b     VARCHAR2(30) :='t_stg1_non_silicon_purchace_re';
    BEGIN
      v_sql := 'SELECT COUNT(*) FROM'||' '||b;
      EXECUTE immediate v_sql INTO a;
      DBMS_OUTPUT.PUT_LINE( TO_CHAR(v_sql));
      DBMS_OUTPUT.PUT_LINE( TO_CHAR(a));
    END;