2017-09-28 71 views
0

我正在使用INFORMIX數據庫。基於informix中複雜select語句的輸出刪除外鍵約束?

我已經在表格中添加了forign鍵而沒有給它一個名字,例如

ALTER TABLE myreport ADD CONSTRAINT FOREIGN KEY (rid) REFERENCES report(id), ADD CONSTRAINT FOREIGN KEY (uid) REFERENCES user(id); 

我想刪除一個select語句的輸出的基礎上,其forign主要制約因素如下:

ALTER TABLE myreport DROP CONSTRAINT (
    SELECT b.constrname 
     FROM 
      systables a, sysconstraints b, sysindexes c, syscolumns d 
     WHERE 
      a.tabname = 'myreport' AND (d.colname='rid' or d.colname='uid') 
     AND 
      b.tabid = a.tabid 
     AND 
      c.idxname = b.idxname 
     AND 
      d.tabid = a.tabid 
     AND 
     (
      d.colno = c.part1 or d.colno = c.part2 or d.colno = c.part3 or d.colno = c.part4 or 
      d.colno = c.part5 or d.colno = c.part6 or d.colno = c.part7 or d.colno = c.part8 or 
      d.colno = c.part9 or d.colno = c.part10 or d.colno = c.part11 or d.colno = c.part12 or 
      d.colno = c.part13 or d.colno = c.part14 or d.colno = c.part15 or d.colno = c.part16 
     ) 
); 

會拋出一個錯誤201: A syntax error has occurred.

但是,當我運行它分開它工作正常,並提供以下輸出如下:

選擇:

SELECT b.constrname 
     FROM 
      systables a, sysconstraints b, sysindexes c, syscolumns d 
     WHERE 
      a.tabname = 'myreport' AND (d.colname='rid' or d.colname='uid') 
     AND 
      b.tabid = a.tabid 
     AND 
      c.idxname = b.idxname 
     AND 
      d.tabid = a.tabid 
     AND 
     (
      d.colno = c.part1 or d.colno = c.part2 or d.colno = c.part3 or d.colno = c.part4 or 
      d.colno = c.part5 or d.colno = c.part6 or d.colno = c.part7 or d.colno = c.part8 or 
      d.colno = c.part9 or d.colno = c.part10 or d.colno = c.part11 or d.colno = c.part12 or 
      d.colno = c.part13 or d.colno = c.part14 or d.colno = c.part15 or d.colno = c.part16 
     ) 

給出:

constrname r169_278 
constrname r169_279 
constrname r169_280 

ALTER TABLE:

ALTER TABLE cuicscheduledreports DROP CONSTRAINT (r169_278, r169_279) 

顯示成功日誌

所以我需要一組查詢將做到實現我的動態方式的要求,因爲這將被用來作爲遷移的數據庫不同的系統

+0

那麼問題是什麼? –

回答

1

DROP約束下不允許約束的子查詢姓名(或名稱)。約束名稱必須明確命名。

DROP約束的語法如下記載:https://www.ibm.com/support/knowledgecenter/SSGU8G_12.1.0/com.ibm.sqls.doc/ids_sqs_0069.htm

DROP CONSTRAINT Clause 

          .-,----------.   
          V   |   
|--DROP CONSTRAINT--+---+----constraint-+--+---+----------------| 
        '-(-'     '-)-' 

只有逗號分隔的名字列表被允許,而不是一個子查詢。

您必須按照您發現的兩個步驟完成此任務。

未來,您應該避免編造虛構的語法並期待它的工作。查看手冊以瞭解語法選項。

+0

所以,你可以給我一組查詢,這將在任何步驟中執行,因爲這個查詢是在不同系統上的數據庫遷移 –

+0

對不起,我不知道你正在使用什麼遷移工具或過程。 –

+0

沒有遷移工具,我們使用一些腳本編寫一些我們在db上執行的sql文件,所以我需要一組查詢語句,它將在不同的系統上執行,並且它應該放棄約束條件 –