写一个简单得不能再简单的存储过程.存在很多疑问.
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感觉很好用的嘛.
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感觉很好用的嘛.
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');
EXECUTE SYS.TEST('AA');
同样错误.
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
2 BEGIN
3 DBMS_OUTPUT.PUT_LINE(STR);
4 END;
5 /
正确.set serveroutput on;
exec hello_pro('he');
错误.
这句 set serveroutput on 后面没有分号';'
不能有分号的
(CODE IN CHAR)
AS
BEGIN
DBMS_OUTPUT.put_line(CODE);
END;
这个是对的.
然后执行部分:EXECUTE TEST('AA')
错误信息:ORA-00900:无效SQL语句
或
EXECUTE SYS.TEST('AA');
一样的错误信息.
(CODE IN CHAR)
AS
BEGIN
DBMS_OUTPUT.put_line(CODE);
END;
这个是对的.
然后执行部分:EXECUTE TEST('AA')
错误信息:ORA-00900:无效SQL语句
或
EXECUTE SYS.TEST('AA');
一样的错误信息.
(CODE IN CHAR)
AS
BEGIN
DBMS_OUTPUT.put_line(CODE);
END;
这个是对的.
然后执行部分:EXECUTE TEST('AA')
错误信息:ORA-00900:无效SQL语句
或
EXECUTE SYS.TEST('AA');
一样的错误信息.
EXECUTE TEST('AA');
http://community.csdn.net/Expert/topic/5272/5272339.xml?temp=.3922693
问题还没解决呢,就不让恢复了...没有连续回复超过3次阿
不知道.我回复了他就说我超过3次了...
--
至少现在没看到你的回复超过3次
(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;
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辛辛苦苦几十年,一夜回到解放前,
DECLARE
CODE VARCHAR2(200);BEGIN
CODE := 'AA'; ET_STATISTICS."TEST_ll" ( CODE );
COMMIT;
END;---ET_STATISTICS是我这边的用户,你可以换成你自己的用户
DECLARE
CODE VARCHAR2(200);BEGIN
CODE := 'AA'; "TEST_ll" ( CODE );
COMMIT;
END;
谢谢你了!!!!!!!^_^
但有几个疑问.
我是这样写的.
BEGIN
SYS.TEST('AAA');
COMMIT;
END;基本和你的一样.为什么要COMMIT?不能自动COMMIT吗?
还有为什么一定要BEGIN ..END呢?
SYS.TEST('AAA');
COMMIT;
这样写就认为是2个过程.
但BEGIN ..END 一定要.呵呵.就是这个问题了.
oracle里面是需要提交的,DDl语句是自动提交
dml语句就要自己commit了--------
oracle里面执行匿名快的时候要用begin end
这是语法规定
这点差距还是很大的