Oracle

oracle pl/sql 塊拋出 ORA-00922:缺少或無效選項

  • September 10, 2021

我有以下部分的 oracle pl/sql 塊

DECLARE
   rec all_tab_columns%ROWTYPE;
   v_tableName VARCHAR2(100);
   v_columnName VARCHAR2(100);
   v_schemaName VARCHAR2(100);
BEGIN
   v_schemaName := 'TESTNEW';
   EXECUTE IMMEDIATE 'create table '||v_schemaName||'.table_column_mapping_8(table_name varchar2(100), column_name varchar2(100));';
   for rec in (
       SELECT table_name, column_name FROM all_tab_columns WHERE identity_column = 'YES' AND OWNER = v_schemaName
   ) LOOP
        v_tableName := rec.table_name;
        v_columnName := rec.column_name;

       EXECUTE IMMEDIATE 'insert into ' ||v_schemaName||'.table_column_mapping_8 values('''||v_tableName||''', '''|| v_columnName ||''');';
     END LOOP;
END;

當我嘗試執行它時,我收到以下錯誤:

錯誤報告 - ORA-00922:缺少或無效選項 ORA-06512:在第 8 行 00922。00000 -“缺少或無效選項” *原因:

*操作:

執行立即語句似乎有問題

試圖用Google搜尋它並找到了這個: http ://www.dba-oracle.com/t_ora_00922_missing_or_invalid_option.htm

找不到真正的原因。

有人可以幫忙嗎?

提前致謝

execute immediate刪除DDL 字元串末尾的分號。Oracle SQL 沒有語句終止符 - 分號僅由客戶端工具和 PL/SQL 語言使用,您的 DDL 字元串不是 PL/SQL。

由於無法辨識的分號字元,此操作失敗:

begin
   execute immediate 'create table demo (id int);';
end;

這有效:

begin
   execute immediate 'create table demo (id int)';
end;

您將需要insert稍後在塊中對動態執行相同的操作。

引用自:https://dba.stackexchange.com/questions/299185