写一个简单得不能再简单的存储过程.存在很多疑问.
 CREATE OR REPLACE PROCEDURE TEST
(CODE IN CHAR) --这里我指定了CHAR为什么不能指定长度(VARCHAR好象也一样):CHAR(2)?
AS
BEGIN
  DBMS_OUTPUT.put_line(CODE); --这里有没有象SQL SERVER的PRINT类似的方法....可以少敲几个字.
END;
EXECUTE TEST('AA');--这里怎么就提示说SQL有错..哎.第一次就那么多问题.怎么SQL SERVER感觉很好用的嘛.

解决方案 »

  1.   

    查了一下坛子.发现在ORACLE中执行PRO是否要这样?
    set serveroutput on
    exec TEST('AA');试了一下还是SQL错误.
    参考以下:
    CREATE OR REPLACE PROCEDURE HELLO_PRO(STR  VARCHAR2) AS
     BEGIN
     DBMS_OUTPUT.PUT_LINE(STR);
     END;SQL> set serveroutput on
    SQL> exec hello_pro('he');
      

  2.   

    帮你顶算了,我也是刚接触oracle,感觉用起来不顺手,以前也用sql server 2000 ,比较熟
      

  3.   

    呵呵 .谢谢.刚刚又查资料说执行存储过程要加上OWNER,
    EXECUTE SYS.TEST('AA');
    同样错误.
      

  4.   

    SQL> CREATE OR REPLACE PROCEDURE HELLO_PRO(STR  VARCHAR2) AS
      2   BEGIN
      3   DBMS_OUTPUT.PUT_LINE(STR);
      4   END;
      5  /Procedure createdSQL> set serveroutput on
    SQL> exec hello_pro('he');
    hePL/SQL procedure successfully completed
      

  5.   

    SQL> CREATE OR REPLACE PROCEDURE HELLO_PRO(STR  VARCHAR2) AS
      2   BEGIN
      3   DBMS_OUTPUT.PUT_LINE(STR);
      4   END;
      5  /
    正确.set serveroutput on;
    exec hello_pro('he');
    错误.
      

  6.   

    paranoia190(190) 
    这句 set serveroutput on 后面没有分号';'
      

  7.   

    set serveroutput on
    不能有分号的
      

  8.   

    CREATE OR REPLACE PROCEDURE "SYS"."TEST" 
    (CODE IN CHAR)
    AS
    BEGIN
      DBMS_OUTPUT.put_line(CODE);
    END;
    这个是对的.
    然后执行部分:EXECUTE TEST('AA')
    错误信息:ORA-00900:无效SQL语句

    EXECUTE SYS.TEST('AA');
    一样的错误信息.
      

  9.   

    CREATE OR REPLACE PROCEDURE "SYS"."TEST" 
    (CODE IN CHAR)
    AS
    BEGIN
      DBMS_OUTPUT.put_line(CODE);
    END;
    这个是对的.
    然后执行部分:EXECUTE TEST('AA')
    错误信息:ORA-00900:无效SQL语句

    EXECUTE SYS.TEST('AA');
    一样的错误信息.
      

  10.   

    CREATE OR REPLACE PROCEDURE "SYS"."TEST" 
    (CODE IN CHAR)
    AS
    BEGIN
      DBMS_OUTPUT.put_line(CODE);
    END;
    这个是对的.
    然后执行部分:EXECUTE TEST('AA')
    错误信息:ORA-00900:无效SQL语句

    EXECUTE SYS.TEST('AA');
    一样的错误信息.
      

  11.   

    名字是写错了
    EXECUTE TEST('AA');
      

  12.   

    paranoia190(190) ( ) 信誉:100    Blog  2007-1-5 10:51:21  得分: 0  
     
     
       
    http://community.csdn.net/Expert/topic/5272/5272339.xml?temp=.3922693
    问题还没解决呢,就不让恢复了...没有连续回复超过3次阿
    不知道.我回复了他就说我超过3次了...
      
     
    --
    至少现在没看到你的回复超过3次
      

  13.   

    CREATE OR REPLACE PROCEDURE "TEST_ll"
    (CODE IN CHAR)
    AS
    BEGIN
      DBMS_OUTPUT.PUT_LINE(CODE);
    END;/
    toad测试
    DECLARE 
      CODE VARCHAR2(200);BEGIN 
      CODE := 'AA';  ET_STATISTICS."TEST_ll" ( CODE );
      
      COMMIT; 
    END;
      

  14.   

    COPY你的代码.什么都没改.
    CREATE OR REPLACE PROCEDURE "TEST_ll"
    (CODE IN CHAR)
    AS
    BEGIN
      DBMS_OUTPUT.PUT_LINE(CODE);
    END;/
    toad测试
    DECLARE 
      CODE VARCHAR2(200);BEGIN 
      CODE := 'AA';  ET_STATISTICS."TEST_ll" ( CODE );
      
      COMMIT; 
    END;执行错误.
    提示错误:
    ORA-06550: 第  7  行,第  3  列
    PLS-00201: 必须说明标识符'ET_STATISTICS.TEST_ll'
    ORA-06550: 第  7  行,第  3  列
    PL/SQL : Statement ignored辛辛苦苦几十年,一夜回到解放前,
      

  15.   

    toad测试
    DECLARE 
      CODE VARCHAR2(200);BEGIN 
      CODE := 'AA';  ET_STATISTICS."TEST_ll" ( CODE );
      
      COMMIT; 
    END;---ET_STATISTICS是我这边的用户,你可以换成你自己的用户
      

  16.   

    toad测试
    DECLARE 
      CODE VARCHAR2(200);BEGIN 
      CODE := 'AA';  "TEST_ll" ( CODE );
      
      COMMIT; 
    END;
      

  17.   

    成功了...
    谢谢你了!!!!!!!^_^
    但有几个疑问.
    我是这样写的.
    BEGIN
    SYS.TEST('AAA');
    COMMIT;
    END;基本和你的一样.为什么要COMMIT?不能自动COMMIT吗?
    还有为什么一定要BEGIN ..END呢?
    SYS.TEST('AAA');
    COMMIT;
    这样写就认为是2个过程.
      

  18.   

    又试了一下.可以不要COMMIT
    但BEGIN ..END 一定要.呵呵.就是这个问题了.
      

  19.   

    COMMIT;
    oracle里面是需要提交的,DDl语句是自动提交
    dml语句就要自己commit了--------
    oracle里面执行匿名快的时候要用begin  end
    这是语法规定
      

  20.   

    sqlserver里面是自动提交的
    这点差距还是很大的