2011-04-18 80 views
0

我正在使用SQl Developer在名爲CONTRACTOR_REG的包中執行過程。該程序具有以下簽名。執行存儲過程時出現Oracle Uknown命令錯誤

PROCEDURE usp_ins_contractor_all(
      webid   VARCHAR2,-- 
      firstname  VARCHAR2,-- 
      lastname  VARCHAR2,-- 
      middlename  VARCHAR2,-- 
      busname  VARCHAR2,-- 
      townname  VARCHAR2,-- 
      strname  VARCHAR2,-- 
      strtypecd  VARCHAR2,-- 
      strpfxcd  VARCHAR2,-- 
      strsfxcd  VARCHAR2,-- 
      addressoverflo VARCHAR2,-- 
      houseno  VARCHAR2,-- 
      zipcd   VARCHAR2,-- 
      state   VARCHAR2,-- 
      phonenum  VARCHAR2,-- 
      phonenight  VARCHAR2, 
      phonecell  VARCHAR2,-- 
      phonefax  VARCHAR2,-- 
      phonepager  VARCHAR2, 
      licno   VARCHAR2,-- 
      regSite  VARCHAR2, 
      licstate  VARCHAR2,-- 
      level_type  VARCHAR2 := 'NA',-- 
      type_cd  CHAR) 

我試圖執行以下操作:

exec user1.contractor_reg.usp_ins_contractor_all('testing12345', 
      'test', 
      'me', 
      'a', 
      'testbiz', 
      'DFGGH', 
      'something', 
      null, 
      null, 
      null, 
      'pobox:12345', 
      '45', 
      '00000', 
      'DF', 
      '1231231231', 
      '2342342344', 
      '443243242', 
      '111111111', 
      null, 
      '123123123', 
      null, 
      'FD', 
      'NA', 
      'EC') 

我獲得以下錯誤:

Error starting at line 25 in command: 
      'EC') 
Error report: 
Unknown Command 

似乎真的隨機給我,什麼是錯我的最後一個參數?

在此先感謝!

+0

它是一個真正的存儲過程,還是一個包內的過程? – DCookie 2011-04-18 17:17:50

+0

程序包,aorry猜我應該更清楚,我習慣於mssql。 – kralco626 2011-04-18 17:20:19

回答

1

Aparently,你不能有換行符其間的每一個放慢參數,像我一樣......愚蠢的計劃......

EXEC user1.contractor_reg.usp_ins_contractor_all(「testing12345」,「測試」,「我」,'一','testbiz','sdfsdf','something',null,null,null,'pobox:12345','45','00000','sdfff','1231231231','2342342344','443243242', '111111111',null,'123123123',null,'sdff','E1','EC')

+1

普通換行符在SQL * Plus或SQL Developer的'EXEC'中不起作用。但是,您可以使用延續字符('-')將命令繼續到第二行;至少在SQL * Plus中,尚未在SQL Developer中進行測試。 [SQL * Plus的文檔](http://download.oracle.com/docs/cd/B19306_01/server.102/b14357/ch12022.htm#i2697931) – 2011-04-18 21:22:46

+0

@alex,這其實有一個很好的理由嗎?爲什麼不能像其他語言一樣空白...... – kralco626 2011-04-19 10:58:18

+0

這不是一個真正的語言問題,它是客戶端(SQL * Plus或SQL Developer,至少)如何解釋和轉換您所呈現的呼叫爲'EXEC ''天。如果您嘗試將整個調用輸入到SQL * Plus中,它會嘗試在第一次返回時立即執行它,它不會等待(或需要)尾隨的';'。我懷疑SQL Developer爲了兼容性而複製它。根據客戶是如何或受到約束,不知道是否有理由,可能是歷史性的。你需要問Oracle * 8) – 2011-04-19 11:19:37

4

您在回覆中提到的原因可能不是導致錯誤的原因。

亞歷克斯下文提到的,使用EXEC用sqlplus,你需要使用延續字符,如果你的命令跨越多行...

http://download.oracle.com/docs/cd/B19306_01/server.102/b14357/ch12022.htm#i2697931

EXEC是SQLPLUS命令。當您使用..

exec p1; 

在sqlplus,這反過來又增加了一個開始和結束塊來執行你的程序......

begin 
    p1; 
end; 
/

不知道SQL Developer支持this.I不有權訪問SQL Developer在工作,但..

您是否嘗試過使用BEGIN-END執行此過程?

begin 
    user1.contractor_reg.usp_ins_contractor_all('testing12345', 
      'test', 
      'me', 
      'a', 
      'testbiz', 
      'DFGGH', 
      'something', 
      null, 
      null, 
      null, 
      'pobox:12345', 
      '45', 
      '00000', 
      'DF', 
      '1231231231', 
      '2342342344', 
      '443243242', 
      '111111111', 
      null, 
      '123123123', 
      null, 
      'FD', 
      'NA', 
      'EC'); 
end; 
/
+0

當我開發一個使用NHibernate的SP包裝器時,我發現需要BEGIN/END – devio 2011-04-18 18:02:49

+0

是的,這也適用,只需要在存儲的proc調用後添加';' – kralco626 2011-04-18 18:15:49

+0

[documentation](http://download.oracle .com/docs/cd/B19306_01/server.102/b14357/ch12022.htm#i2697931)對於'EXEC'提到命令必須放在一行上,但可以明確地繼續。 – 2011-04-18 21:24:21