今天第一次接触ORCALE,咋得就那么不习惯....

paranoia190 2007-01-03 03:53:31
写一个简单得不能再简单的存储过程.存在很多疑问.
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感觉很好用的嘛.
...全文
471 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
icedut 2007-01-05
  • 打赏
  • 举报
回复
toad测试
DECLARE
CODE VARCHAR2(200);

BEGIN
CODE := 'AA';

"TEST_ll" ( CODE );

COMMIT;
END;
icedut 2007-01-05
  • 打赏
  • 举报
回复
toad测试
DECLARE
CODE VARCHAR2(200);

BEGIN
CODE := 'AA';

ET_STATISTICS."TEST_ll" ( CODE );

COMMIT;
END;

---ET_STATISTICS是我这边的用户,你可以换成你自己的用户
paranoia190 2007-01-05
  • 打赏
  • 举报
回复
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

辛辛苦苦几十年,一夜回到解放前,

icedut 2007-01-05
  • 打赏
  • 举报
回复
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;
icedut 2007-01-05
  • 打赏
  • 举报
回复
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次
icedut 2007-01-05
  • 打赏
  • 举报
回复
名字是写错了
EXECUTE TEST('AA');
paranoia190 2007-01-05
  • 打赏
  • 举报
回复
哦基本明白了.真的非常感谢你.
icedut 2007-01-05
  • 打赏
  • 举报
回复
sqlserver里面是自动提交的
这点差距还是很大的
icedut 2007-01-05
  • 打赏
  • 举报
回复
COMMIT;
oracle里面是需要提交的,DDl语句是自动提交
dml语句就要自己commit了

--------
oracle里面执行匿名快的时候要用begin end
这是语法规定
paranoia190 2007-01-05
  • 打赏
  • 举报
回复
又试了一下.可以不要COMMIT
但BEGIN ..END 一定要.呵呵.就是这个问题了.
paranoia190 2007-01-05
  • 打赏
  • 举报
回复
成功了...
谢谢你了!!!!!!!^_^
但有几个疑问.


我是这样写的.
BEGIN
SYS.TEST('AAA');
COMMIT;
END;

基本和你的一样.为什么要COMMIT?不能自动COMMIT吗?
还有为什么一定要BEGIN ..END呢?
SYS.TEST('AAA');
COMMIT;
这样写就认为是2个过程.
paranoia190 2007-01-04
  • 打赏
  • 举报
回复
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');
一样的错误信息.
paranoia190 2007-01-04
  • 打赏
  • 举报
回复
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');
一样的错误信息.
paranoia190 2007-01-04
  • 打赏
  • 举报
回复
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');
一样的错误信息.
baojianjun 2007-01-03
  • 打赏
  • 举报
回复
习惯成自然 多多尝试和练习就会好多了

你能把你的具体的错误信息贴出来看看吗?
tgm78 2007-01-03
  • 打赏
  • 举报
回复
set serveroutput on
不能有分号的
paranoia190 2007-01-03
  • 打赏
  • 举报
回复
有的.肯定不是这个问题.
lee576 2007-01-03
  • 打赏
  • 举报
回复
paranoia190(190)
这句 set serveroutput on 后面没有分号';'
paranoia190 2007-01-03
  • 打赏
  • 举报
回复
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');
错误.
wiler 2007-01-03
  • 打赏
  • 举报
回复
SQL> CREATE OR REPLACE PROCEDURE HELLO_PRO(STR VARCHAR2) AS
2 BEGIN
3 DBMS_OUTPUT.PUT_LINE(STR);
4 END;
5 /

Procedure created

SQL> set serveroutput on
SQL> exec hello_pro('he');
he

PL/SQL procedure successfully completed
加载更多回复(3)

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧