ORA-00904 :標識符無效


  • 執行如下SQL 出現以下ERROR

 1 create or replace procedure P_DISTABLE_FK(IN_TABLE in varchar2) is
 2 --失效 輸入表名稱的外鍵
 3 V_SQL VARCHAR2(200) ;
 4 V_FK  VARCHAR2(60); 
 5 begin
 6       --查詢外鍵名稱
 7       V_SQL :='SELECT * FROM USER_CONSTRAINTS WHERE CONSTRAINT_TYPE='|| 'R'||  '  and  table_name='||IN_TABLE;
 8        dbms_output.put_line(  ' V_SQL IS ' ||  V_SQL);
 9     
10       execute immediate V_SQL into V_FK;
11       v_sql:='alter table'|| IN_TABLE ||'disable constraint '||V_FK;  
12       EXECUTE IMMEDIATE v_sql;
13 end P_DISTABLE_FK;
  • 打印 V_SQL 變量 :

 V_SQL IS SELECT * FROM USER_CONSTRAINTS WHERE CONSTRAINT_TYPE=R  and  table_name='B';

  • 發現問題出在:CONSTRAINT_TYPE=R

 SQL 應該為:SELECT * FROM USER_CONSTRAINTS WHERE CONSTRAINT_TYPE='R'  and  table_name='B';

修改存儲過程:

create or replace procedure P_DISTABLE_FK(IN_TABLE in varchar2,IN_TYPE IN VARCHAR2) is
--失效 輸入表名稱的外鍵
V_SQL VARCHAR2(200) ;
V_FK  VARCHAR2(60);  
begin
      --查詢外鍵名稱
      V_SQL :='SELECT * FROM USER_CONSTRAINTS WHERE CONSTRAINT_TYPE='|| IN_TYPE||  '  and  table_name='||IN_TABLE;
       dbms_output.put_line(  ' V_SQL IS ' ||  V_SQL);
    
      execute immediate V_SQL into V_FK;
      v_sql:='alter table'|| IN_TABLE ||'disable constraint '||V_FK;  
      EXECUTE IMMEDIATE v_sql;
end P_DISTABLE_FK;

這樣輸出的SQL 就為:正確形式了

SELECT * FROM USER_CONSTRAINTS WHERE CONSTRAINT_TYPE='R'  and  table_name='B'


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM