存储过程脚本,function ,package创建类似
create or replace PROCEDURE P_TEST(a in number,b in number,c out number)
as 
begin
c:=bitand(a,b);
end p_test;sqlplus调用
SQL> set serveroutput on
SQL> declare c number;
  2  begin
  3  p_test(1,2,c);
  4  dbms_output.put_line(c);
  5  end;
  6  /
0PL/SQL 过程已成功完成。SQL>
SQL Navigator/TOAD中调用
找到P_TEST后run就可以了

解决方案 »

  1.   

    1、写存储过程
    CREATE OR REPLACE PROCEDURE PROC_NAME
    (
    PARAMETER1 IN DATATYPE,
    PARAMETER2 IN OUT DATATYPE,
    PARAMETER3 OUT DATATYPE
    )
    AS
    BEGIN
    /* PROCEDURE BODY HERE */
    END PROC_NAME;
    2、在sqlplus中调用
       无输出参数的调用
     EXEC PROC_NAME(PARA1,PARA2);
       有输出参数的调用
     DECLARE
      OUT_PARA  DATA_TYPE;
     BEGIN
       PROC_NAME(PARA1,OUT_PARA);
     END;
    3、第三方工具,可以打开过程,选调试
      

  2.   

    1、创建包
    CREATE OR REPLACE  PACKAGE "SCOTT"."HWTYPE" as
      TYPE HWCURSOR IS REF CURSOR;
    end;2、创建存储过程
    CREATE OR REPLACE  PROCEDURE "SCOTT"."PROC_TEST_CURSOR" (DDD OUT 
        HWTYPE.HWCURSOR)
     as
    var_DEPTNO DEPT.DEPTNO%TYPE;
    var_DNAME  DEPT.DNAME%TYPE;
    var_LOC    DEPT.LOC%TYPE;
    begin
     
     --这样可以动态设置游标了。
     AA:='SELECT DEPTNO,DNAME,LOC FROM DEPT';
     open DDD for aa;
     
     
     --用起来和一般游标一样。
     FETCH DDD INTO var_DEPTNO,var_DNAME,var_LOC;  
     WHILE DDD%FOUND LOOP
     
      DBMS_OUTPUT.PUT_LINE(var_DEPTNO);   
      DBMS_OUTPUT.PUT_LINE(var_DNAME);
      DBMS_OUTPUT.PUT_LINE(var_LOC);
      FETCH DDD INTO var_DEPTNO,var_DNAME,var_LOC; 
     END LOOP;
     CLOSE DDD;
     
    EXCEPTION
    WHEN OTHERS THEN
      IF DDD%ISOPEN THEN
        CLOSE DDD;
      END IF; 
    end;
    3、sqlplus中进行测试:set serverout on
    var aa REFCURSOR
    exec scott.PROC_TEST_CURSOR(:aa);
    print :aa;