【问题标题】:Running Linux Functions inside Sqlplus在 Sqlplus 中运行 Linux 函数
【发布时间】:2016-03-15 20:17:07
【问题描述】:

我可以使用HOST 命令从Oracle SQLPLUS 内部调用用户创建的shell 函数吗?如果不是,解决问题的最佳方法是什么?

本质上,我想运行一个 shell 文件:

Shell commands
sqlplus
@file.sql
HOST mylinuxfunction...
@file2.sql
HOST anotherlinuxfunction..
exit
Shell commands

谢谢!

【问题讨论】:

  • 试一试需要多少钱?
  • 我希望可以,但我被锁定了。我只是一个实习生,什么都没有。
  • 如果您被锁定而无法访问任何内容,那么这是一个没有实际意义的问题。 @Mark Stewart 提出了一些很好的观点,但在这里我们需要退后一步,询问您真正想要解决的问题,而不是专注于特定的技术。如果只是为了精简,您可以在自己的计算机上创建自己的测试系统。安装 VirtualBox,创建一个 vm,使用 Oracle Linux 对其进行配置,然后在其上安装一个 Oracle db。网络上到处都是关于如何做的信息。

标签: linux oracle sqlplus


【解决方案1】:

您当然可以从 SQLPlus 脚本调用 HOST 命令,但我想您真的在问您是否可以在其余的 SQLPlus 脚本中使用您的 linux 函数的返回值。而且您可能还想在您的 linux 函数中使用 SQL 查询的结果。

如果您不需要需要将 SQL 信息传递给您的 linux 函数,并且 不需要需要在 SQL 的其余部分中访问 linux 函数的结果,那么你所拥有的几乎可以工作。这会

date
sqlplus / << xxENDxx \
    @file.sql
    HOST mylinuxfunction...
    @file2.sql
    HOST anotherlinuxfunction..
    exit
xxENDxx
date

现在如果你想从你的 linux 函数中获取信息到 SQL 中,你将不得不使用外部表;很多设置,但请看这里:https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:439619916584 并搜索“但这是另一种有趣的方法,在 10.2.0.5 及更高版本中可用:”

如果您想将在调用 SQLPlus 之前完成的 Linux 命令中的信息传递到您的 SQL 命令中,这将是这样的,即在 uptimes 表中插入一行,其中包含存储在BASH 变量$UPTIMES

#!/bin/bash
if [ "$1" = "" ]
then
    echo Missing User ID parm
    exit 1
else
    USER_ID=$1
fi

read  -p "Enter Your password for Oracle instance $ORACLE_SID for user $USER_ID: " PW

UPTIMES=`uptime | awk -F,  '{print $3, $4, $5}' | awk '{printf "%2.2f,%2.2f,%2.2f\n", $3, $4, $5}'`
sqlplus /nolog << xxENDxx \

connect $USER_ID/$PW

        insert into uptimes (date_stamp, one_min, five_min, fifteen_min) values (sysdate, $UPTIMES);
        HOST ls -o uptimes.sh
        --@file2.sql
        select * from uptimes;
        HOST du -sh .
        exit
xxENDxx

date

调用上面给出的结果是:

oracle. (/home/oracle/sql)
Linux> ./uptimes.sh mark.stewart
Enter Your password for Oracle instance ecs03 for user mark.stewart: xxxx

SQL*Plus: Release 12.1.0.2.0 Production on Thu Mar 17 20:09:36 2016
Dev:@> Connected.
Dev:MARK.STEWART@ecs03> Dev:MARK.STEWART@ecs03>
1 row created.

Dev:MARK.STEWART@ecs03> -rwxr-xr-x. 1 oracle 548 Mar 17 20:09 uptimes.sh

Dev:MARK.STEWART@ecs03> Dev:MARK.STEWART@ecs03>
DATE_STAM    ONE_MIN   FIVE_MIN FIFTEEN_MIN
--------- ---------- ---------- -----------
17-MAR-16          0        .01         .05
17-MAR-16          0        .01         .05
17-MAR-16          0        .01         .05

Dev:MARK.STEWART@ecs03>  146M    .

Dev:MARK.STEWART@ecs03> Disconnected from Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options
Thu Mar 17 20:09:36 CET 2016
oracle. (/home/oracle/sql)
Linux>

【讨论】:

    猜你喜欢
    • 2021-05-23
    • 1970-01-01
    • 2021-04-22
    • 1970-01-01
    • 2011-06-06
    • 1970-01-01
    • 2011-07-29
    • 2015-07-06
    • 1970-01-01
    相关资源
    最近更新 更多