带参数的PL / SQL过程

时间:2014-05-12 05:58:48

标签: parameters plsql procedure

我已经累了,我的任务将在七个小时内到期。我需要一个善良的灵魂来帮助我!

所以这是我的第一个PL / SQL类。我们正在开始处理程序和功能。

所以这就是我坚持的那个。问题是:

此问题使用wf_countries表。

一个。创建一个接受country_id作为参数的过程,并显示该国家/地区的名称 国会大厦。将您的程序命名为get_country_info。保存您的过程定义以供以后使用。

B中。使用country_id 90从匿名块执行您的过程。

℃。从匿名块重新执行该过程,这次使用country_id 95.会发生什么?

d。从Saved SQL检索过程代码并修改它以在异常处理程序中捕获NO_DATA_FOUND异常。再次使用country_id 95重新执行该过程。现在发生了什么?

这是我为A写的:

CREATE OR REPLACE PROCEDURE get_country_info
(p_id IN wf_countries.country_id%TYPE,
p_capitol OUT wf_countries.capitol%TYPE,
p_name OUT wf_countries.country_name%TYPE)
IS
BEGIN
SELECT capitol, country_name 
INTO p_capitol, p_name
FROM wf_countries
WHERE country_id=p_id;
END;

我让它运行。但后来我意识到,如果我尝试通过键入以下来调用该过程:

BEGIN
get_country_info
END;

我需要国家/地区ID。咄。但我不能只把get_country_info(90)放在一边,因为它需要更多的参数。我只需要使用国家ID作为参数,并显示名称和国会大厦。

我真的很沮丧,感谢您提供的任何帮助。

3 个答案:

答案 0 :(得分:1)

根据您的问题规范: get_country_info 应该只使用一个参数: country_id

  • 删除其他两个参数并将其声明为过程中的局部变量

  • 要显示值,请使用DBMS_OUTPUT.PUT_LINE

如果在SQL * Plus中运行,请不要忘记先运行:

SET SERVEROUTPUT ON

同样对于例外部分,请查看Error Handling

答案 1 :(得分:0)

CREATE OR REPLACE PROCEDURE get_country_info
    (p_id IN wf_countries.country_id%TYPE,
    oCur OUT SYS_REFCURSOR
)
IS
BEGIN
    OPEN oCur FOR
    SELECT capitol, country_name 
      FROM wf_countries
     WHERE country_id=p_id;
END;

然后,在致电:

DECLARE retCursor SYS_REFCURSOR;
BEGIN
    get_country_info(123, retCursor);
END;
/

答案 2 :(得分:0)

试试这个:

CREATE OR REPLACE PROCEDURE get_country_info
  (p_id  IN  wf_countries.country_id%TYPE)
IS
  vCapitol  wf_countries.capitol%TYPE;
  vName     wf_countries.country_name%TYPE;
BEGIN
  SELECT capitol,
         country_name 
    INTO vCapitol,
         vName
    FROM wf_countries
    WHERE country_id = p_id;

  DBMS_OUTPUT.PUT_LINE('Name='  || vName || '  Capitol=' || vCapitol);
EXCEPTION
  WHEN NO_DATA_FOUND THEN
    DBMS_OUTPUT.PUT_LINE('No data found for COUNTRY_ID=' || p_id);
END;

祝你好运。