请问大吓,我想用存储过程查一个表该如果写这样的一个存储过程呢,谢谢!(这是很简单的动作,但我老是出错)^@^

解决方案 »

  1.   

    是返回数据集吗?
    PL/SQL 代码:
    CREATE OR REPLACE PACKAGE "PKG_TEST" AS
           TYPE myrcType IS REF CURSOR;
           FUNCTION get(strSQL VARCHAR) RETURN myrcType;
    END pkg_test;CREATE OR REPLACE PACKAGE BODY "PKG_TEST" AS
        FUNCTION get(strSQL IN VARCHAR) RETURN myrcType IS
          rc myrcType;
        BEGIN
          OPEN rc FOR strSQL;
          RETURN rc;
        END get;
    END pkg_test;
      

  2.   

    找本ORACLE简单的书,都有讲的,
    自己试验一下吧。
      

  3.   

    --PL/SQL的存储过程示例CREATE OR REPLACE PROCEDURE prc_selTest (inPhone IN CHAR DEFAULT 'null', cityName OUT CHAR) AS
    /*“OR REPLACE”自动删除已经存在的同名存储过程,“IN”输入参数,“OUT”输出参数*/
    phoneNum VARCHAR(15);
    BEGIN
    IF (substr(inPhone,1,2)<>'86') THEN
    phoneNum:='86' || inPhone;
    ELSE
    phoneNum:=inPhone;
    END IF; SELECT city_name 
    INTO cityName
    FROM tb_phone_no
    WHERE phone_no=substr(phoneNum,3,7);
    EXCEPTION
    WHEN no_data_found THEN /*未找到记录时的异常处理*/
    DBMS_OUTPUT.PUT_LINE('INPUT: ' || inPhone || '. No data found for SELECT .. INTO!');
    WHEN too_many_rows THEN /*查询到多条记录时的异常处理*/
    DBMS_OUTPUT.PUT_LINE('Too many rows found for SELECT .. INTO!');
    END prc_selTest;/*使用PL/SQL语句调用存储过程*/
    DECLARE
    strValue VARCHAR(20) := '999';
    BEGIN
    prc_selTest('8613301230001',strValue);
    DBMS_OUTPUT.PUT_LINE('cityName:' || strValue);
    END;
      

  4.   

    any more example,thank you!!