PLOP中的PL/SQL EXECUTE IMMEDIATE(截断模式中所有表的过程)

Kar*_*zik 2 oracle plsql procedure execute-immediate

我需要创建一个过程,它将从一个模式中的表中删除所有数据.我尝试过类似的东西

CREATE OR REPLACE PROCEDURE CLEAR_ALL
IS
  sql_truncate VARCHAR2(50);

  cursor c1 is
   SELECT table_name
   FROM all_tables 
   WHERE owner = 'KARCHUDZ_S';
BEGIN
  sql_truncate := 'TRUNCATE TABLE :text_string';
  FOR table_name in c1
   LOOP
      EXECUTE IMMEDIATE sql_truncate USING table_name;
   END LOOP;
END CLEAR_ALL;
Run Code Online (Sandbox Code Playgroud)

但它给了我两个我无法理解和修复的错误.

错误(13,7):PL/SQL:语句被忽略

错误(13,44):PLS-00457:Statment必须是SQL的类型< - (这个错误我必须翻译,因为我使用大学Oracle 11g基础有波兰语lang)

Asc*_*ian 6

为什么不生成语句并调用它,像这样?

CREATE OR REPLACE PROCEDURE CLEAR_ALL
IS
  vs_statement VARCHAR2(100);

  cursor c1 is
   SELECT table_name
   FROM all_tables 
   WHERE owner = 'KARCHUDZ_S';
BEGIN
  FOR table_rec in c1
   LOOP
      vs_statement := 'TRUNCATE TABLE ' || table_rec.table_name;
      EXECUTE IMMEDIATE vs_statement;
   END LOOP;
END CLEAR_ALL;
Run Code Online (Sandbox Code Playgroud)