ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 【SQL】通过设置环境变量SQLPATH 实现SQL*PLUS执行脚本目录动态化

【SQL】通过设置环境变量SQLPATH 实现SQL*PLUS执行脚本目录动态化

原创 Linux操作系统 作者:chicheng_cn421 时间:2011-11-02 12:59:44 0 删除 编辑

这个问题是在回答论坛上一位朋友的问题贴时做的一个调查,记录一下。

帖子地址:http://www.itpub.net/forum.php?mod=viewthread&tid=1507236#lastpost

那位朋友的问题:
-----------------------------------
sql文件如下:
SQL codeset serveroutput on;exec dbms_output.put_line('test ...');begin     ...end;@C:\SQL\B.sql;@C:\SQL\B1.sql;@C:\SQL\B2.sql;.....@C:\SQL\N.sql


我在SQL中直接使用@ + 另外一个SQL文件的路径,来实现在SQL文件中调用其他SQL文件。
但现碰到一个问题:希望能将路径的公共部分抽取成一个变量。定义在文件开头,方便整体修改。

我想过两种方式,不知道能否实现。请大家不甚赐教。
1、直接在SQL中写:
variable lpath = "C:\SQL" (将C盘SQL目录定义成一个公共字符串,后面所有的SQL文件完整路径用该字符串进行拼接)
@:lpath||B.sql
@:lpath||B1.sql
....

2、在PLSQL段中,利用动态SQL:
SQL codedeclare      lpath varchar2(10);beginexecute immediate '@'||lpath||'B.sql';end;

-----------------------------------


我的问题解决贴:
-----------------------------------
发表于 2011-11-2 12:58:22 |只看该作者
chicheng_cn421 发表于 2011-11-2 08:21
先提供一个思路吧,但手头现在没数据库,暂时没法验证,做个参考吧:
————
在数据库中定义一个direct ...

不好意思,刚刚我在数据库上试了一下,上面这种定义directory的方式不好使,
在SQLPLUS中似乎没法直接使用 directory 定义的值。

提供另外一种解决方案,已测试可用,供参考。(※我是在Windows下测试的,Linux下同样是设置SQLPATH)
在执行SQLPLUS之前,设置环境变量SQLPATH

另外简单说明一下SQLPLUS查找在执行@XXX.sql等脚本文件时的顺序:
1)先在当前路径下查找,如果找到则运行,运行后停止查找。
2)如果没找到,再查找是否设置了SQLPATH环境变量,如果已经设置了该环境变量,就在该变量所对应的路径下查找,如果找到则运行,运行后停止查找。
3)如果没有找到也会停止查找,不会再继续查找。
4)如果没有设置SQLPATH环境变量同样停止查找,不会再继续查找。

-----------------------------------------------
■在D:\mytest目录下建立测试脚本文件1.sql
1.sql内容:
select sysdate from dual;

■设置sqlpath,执行1.sql
C:\>set sqlpath=D:\mytest\

C:\>sqlplus scott/tiger

SQL*Plus: Release 10.2.0.1.0 - Production on 水 11月 2 12:40:49 2011
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
に接続されました。
SQL> @1.sql

SYSDATE
--------
11-11-02

SQL>
-----------------------------------------------

以上。
----------------------------------

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/20335819/viewspace-710096/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2011-03-05

  • 博文量
    261
  • 访问量
    417489