2013-05-30 57 views
0

我知道,可能會在ORACLE中重載PLSQL函數和過程。 我試圖重載DB2中的一個過程,但發生錯誤。 DB2是否限制了這一點,或者我做錯了什麼。在DB2中重載存儲過程

臨1

CREATE OR REPLACE PROCEDURE saju_pro (
    s_num1  IN  NUMBER, 
    s_num2  IN OUT  NUMBER) 
AS 
BEGIN 
    s_num2 := (s_num1+s_num2); 
END saju_pro; 
/

PRO2

CREATE PROCEDURE saju_pro (
    s_num1  IN  NUMBER, 
    s_num2  IN  NUMBER, 
    s_num3  OUT  NUMBER ) 
AS 
BEGIN 
    s_num3 := (s_num1+s_num2); 
END saju_pro; 
+0

java如何與這個問題相關? – nakosspy

+0

@nakosspy我正在使用JDBC來獲取其元數據。添加效果。 :)刪除! – Saju

回答

2

是可能的過載DB2過程。有兩種方法可以做到這一點。其中之一是聲明和定義的程序爲PL/SQL包的一部分:

create or replace package body blah 
as 
    PROCEDURE saju_pro (
    s_num1  IN  NUMBER, 
    s_num2  IN OUT  NUMBER) 
    AS 
    ... 
    PROCEDURE saju_pro (
    s_num1  IN  NUMBER, 
    s_num2  IN  NUMBER, 
    s_num3  OUT  NUMBER ) 
    AS 
    ... 
end; 

如果你真的想要獨立的程序,您必須使用DB2 SQL PL的語法,而不是PL/SQL語法創建它們,因爲只有使用SQL PL語法,纔可以使用SPECIFIC選項讓DB2區分這兩者。

CREATE OR REPLACE PROCEDURE saju_pro (
IN s_num1 NUMBER, 
INOUT s_num2 NUMBER) 
SPECIFIC pro1 
BEGIN 
SET s_num2 = (s_num1+s_num2); 
END; 
-- etc. 
+0

謝謝。我正在使用** syscat.routineparms **來獲取過程定義元數據。請告訴我如何識別過程是否過載,使用此表? – Saju

+0

如何識別過程是否過載**不**使用任何表格?你可以應用相同的邏輯。 – mustaccio

+0

好吧,我需要在運行時使用java來確定它。那麼這怎麼可能不是**不**邏輯工作? – Saju