oracle sqlplus 定义变量的问题

didiaogao 2009-08-03 10:39:07
写了一个造数据的存储过程
我想用批处理 调用存储过程
BAT内容:
sqlplus NEXCOSMS/NEXCOSMS@NEXCOSMS @SQL\SP_H_MESSAGE\H_MESSAGE.sql

sql语句内容
spool H_MESSAGE.log
DEFINE insertDateCount = &插入件数
DEFINE V_SLEEPNUM = &暂停时件数
  DEFINE SLEEPTIME = &暂停时间
/*因为我插入的数据量会很大 所以提供了暂停功能*/


SELECT TO_CHAR(SYSDATE,'YYYY/MM/DD HH24:MI:SS') AS 更新前時間 FROM DUAL;
SELECT TO_CHAR(COUNT(1)) AS 更新前数据条数 FROM H_MESSAGE1;
DECLARE
STR_MSG VARCHAR2(256);
BEGIN
STR_MSG := '';
-- 存储过程 第一个参数 是插入件数,第二个暂停时件数 第三个暂停时间 第四个 异常错误信息【返回】
DATASEIZOU.H_MESSAGE_INSERT(&&insertDateCount ,&&V_SLEEPNUM,&&SLEEPTIME,STR_MSG);
/*就在这里 我怎么能把返回的STR_MSG值 写在log里面啊,也就是说怎么把begin。。end 中变量的值传到外面的变量里面*/
COMMIT;
END;

/
SELECT TO_CHAR(SYSDATE,'YYYY/MM/DD HH24:MI:SS') AS 更新後時間 FROM DUAL;
SELECT TO_CHAR(COUNT(1)) AS 更新後数据件数 FROM H_MESSAGE1;
spool off
exit;
...全文
1405 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
majy 2009-08-03
  • 打赏
  • 举报
回复
variable STR_MSG varchar2;

spool
H_MESSAGE.log
DEFINE insertDateCount = &插入件数
DEFINE V_SLEEPNUM = &暂停时件数
  DEFINE SLEEPTIME = &暂停时间
/*因为我插入的数据量会很大 所以提供了暂停功能*/


SELECT TO_CHAR(SYSDATE,'YYYY/MM/DD HH24:MI:SS') AS 更新前時間 FROM DUAL;
SELECT TO_CHAR(COUNT(1)) AS 更新前数据条数 FROM H_MESSAGE1;
BEGIN
STR_MSG := '';
-- 存储过程 第一个参数 是插入件数,第二个暂停时件数 第三个暂停时间 第四个 异常错误信息【返回】
DATASEIZOU.H_MESSAGE_INSERT(&&insertDateCount ,&&V_SLEEPNUM,&&SLEEPTIME, :STR_MSG);
/*就在这里 我怎么能把返回的STR_MSG值 写在log里面啊,也就是说怎么把begin。。end 中变量的值传到外面的变量里面*/
COMMIT;
END;

print STR_MSG;
inthirties 2009-08-03
  • 打赏
  • 举报
回复
你这样的方式不用define,define是替代变量,是不能实现你的这个功能的

你可以用variable,绑定变量来实现


SQL> variable v_s varchar2(1000);
SQL> begin
2 :vs := 123;
3 end;
4 /

以上就是在plsql里赋值了

然后在sqlplus可以
SQL> print :v_s;
或者
SQL> select :v_s from dual;

来显示。





3,494

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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