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;
...全文
1391 2 打赏 收藏 转发到动态 举报
写回复
用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;

来显示。





Oracle 主要配置文件介绍:profile文件,oratab 文件,数据库实例初始化文件 initSID.ora,监听配置文件, sqlnet.ora 文件,tnsnames.ora 文件1.2 Oracle 主要配置文件介绍1.2.1 /etc/profile 文件 系统级的环境变量一般在/etc/profile 文件中定义 在 CAMS 系统 与数据库 相关的环境变量定义在/etc/profile 文件中 如下所示 export ORACLE_BASE=/u01/app/oracle export ORACLE_HOME=$ORACLE_BASE/product/8.1.7 export PATH=$PATH:$ORACLE_HOME/bin export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib export ORACLE_SID=cams export ORACLE_TERM=vt100 export ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data export NLS_LANG=AMERICAN.ZHS16CGB231280 & 说明 1 配置上述环境变量要注意定义的先后顺序 如 定义 ORACLE_HOME 时 用 到 了 ORACLE_BASE 那 么 ORACLE_HOME 的 定 义 应 该 在 ORACLE_BASE之后 2 在使用中文版 CAMS 时 环境变量 NLS_LANG 的值应该设置为 AMERICAN.ZHS16CGB231280 如上所示 在使用英文版 CAMS时 可 以不设置 NLS_LANG 即去掉 export NLS_LANG=... ... 那一行 也可以 设置 NLS_LANG 的值为 AMERICAN_AMERICA.US7ASCII1.2.2 /etc/oratab 文件 /etc/oratab 文件描述目前系统中创建的数据库实例 以及是否通过 dbstart 和 dbshut 来控制该实例的启动与关闭 如下所示 忽略以#开头的注释部分 : cams:/u01/app/oracle/product/8.1.7:Y 其中 cams 为实例 ID /u01/app/oracle/product/8.1.7为 ORACLE_HOME目 录 Y表示允许使用 dbstart和 dbshut 启动和关闭该实例数据库 如果设置为 N 表示不通过 dbstart 和 dbshut 启动和关闭实例数据库 CAMS 系统要求在 安装完 ORACLE 后要求将该参数修改为 Y 以保证 ORACLE 数据库自启动 和关闭 1.2.3 数据库实例初始化文件 initSID.ora 每个数据库实例都有一个初始化 参数文件 其缺省 存放的路径为 $ORACLE_BASE/admin//pfile 其名称为 init.ora 如 cams 实 例 对 应 的 参 数 文 件 为 initcams.ora 缺 省 存 放 路 径 为 $ORACLE_BASE/admin/cams/pfile 即/u01/app/oracle/admin/cams/pfile
Oracle 数据库客户端 在D:/instantclient_11_2目录下新建目录network,在network目录下再新建admin目录,在admin目录下新建文件tnsnames.ora,使用文本编辑器打开写入如下内容: MWDB= (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.58)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = MWDB) ) ) 2、添加一个环境变量,名为TNS_ADMIN,值为tnsnames.ora文件所在路径。比如我的本机为:D:/instantclient_11_2/network/admin 3、设置ORACLE的语言,添加环境变量NLS_LANG ,值为SIMPLIFIED CHINESE_CHINA.ZHS16GBK 第一个黄色字块:表示定义远程服务器的在本地主机名 第二个黄色字块:远程数据库实例名 如果不清楚远程数据库的ORACLE 语言,可以ssh或者telnet到远程机器,在命令界面输入,用命令行连接到数据库。 select * from nls_instance_parameters; 查看NLS_LANGUAGE 的值 NLS_LANGUAGE NLS_TERRITORY 4、下载并安装PL.SQL.Developer配置应用 貌似把环境变量Path添加了instantclient就可以了,不需要具体的设置。 配置tools->preferences->connection Oracle Home     D:/instantclient_11_2 OCI library     D:/instantclient_11_2/oci.dll 中文的PL/SQL Developer就是 工具–>首选项–>连接 Oracle主目录     D:/instantclient_11_2 OCI库     D:/instantclient_11_2/oci.dll 5.添加系统属性中的环境变量Path:D:/instantclient_11_2/可以保证在cmd中使用sqlplus链接到远程的oracle sqlplus TAXYS1_1/TAXYS1_1 @'(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.225)(PORT = 1521)))(CONNECT_DATA =(SERVER = DEDICATED) (SERVICE_NAME = ORCL)))’ sqlplus TAXYS1_1/TAXYS1_1@'(description=(address_list=(address=(proto=tcp)(host=192.168.0.225)(port=1521)))(connect_data=(service_name=orcl)))’ sqlplus TAXYS1_1/TAXYS1_1@192.168.0.225:1521/orcl --------------------- 作者:我在爱的国 来源:CSDN 原文:https://blog.csdn.net/magaiou/article/details/80322685 版权声明:本文为博主原创文章,转载请附上博文链接!

3,490

社区成员

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

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