Oracle
oracle pl/sql 塊拋出 ORA-00922:缺少或無效選項
我有以下部分的 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
稍後在塊中對動態執行相同的操作。