2013-05-30 5 views
0

Я знаю, что в ORACLE можно перегружать PLSQL-функции и процедуры. Я попытался перегрузить процедуру в DB2, но ошибся. Ограничивает ли DB2 это, или я делаю что-то неправильно.Перегрузка хранимой процедуры в DB2

Pro 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

Как явствует по этому вопросу? – 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 ** для получения метаданных определения процедуры. COuld, пожалуйста, скажите мне, как определить, перегружена ли процедура или нет, используя эту таблицу? – Saju

+0

Как вы определяете, перегружена ли процедура или нет ** ** ** с использованием каких-либо таблиц? Вы можете применить ту же логику. – mustaccio

+0

ну, мне нужно определить его во время выполнения с помощью java. Итак, как это могло бы работать не ** ** **? – Saju

Смежные вопросы