【问题标题】:How to execute SQL from Oracle SQL Plus passing variable name SQL file from Unix如何从 Oracle SQL Plus 执行 SQL,从 Unix 传递变量名 SQL 文件
【发布时间】:2019-01-22 14:47:13
【问题描述】:

对于 Oracle DB 和 HP-UX: 我有一个变量名 SQL 文件,例如:my_sql_file_${TIMESTAMP}.sql

我将此文件分配给一个变量:MYSQLFILE="my_sql_file_${TIMESTAMP}.sql"

所以,我正在尝试在 SQL Plus 中执行 MYSQLFILE,例如:

@${MYSQLFILE}

但这似乎无法做到。 有什么办法可以实现上述吗??

谢谢。

【问题讨论】:

  • 您能否edit your question 展示您如何调用 SQL*Plus 并在上下文中使用该变量?当然是更改敏感数据(用户名/密码/等),但在其他方面完全按照您的运行方式保留?

标签: oracle sqlplus hp-ux


【解决方案1】:

这应该可行:

MYSQLFILE="my_sql_file_${TIMESTAMP}.sql"

sqlplus -S user/password@db << EOF
@$MYSQLFILE
exit;
EOF

您还可以将用户、密码和数据库作为参数传递给您的脚本

【讨论】:

  • 不幸的是,我已经尝试过了,但不起作用... :( 我得到响应:SP2-3010: 无法打开文件“$MYSQLFILE”。
  • @Kostas75 - 你是在这样做,还是在引用 heredoc 标记 - 即 &lt;&lt; "EOF"
  • 我正在这样做(使用EOF)并且不起作用,尝试了几次。只有 1 行命令有效(没有 EOF)。
  • @Kostas75 你用的是哪个shell?
  • @vc 74: #!/bin/sh(在 shell 脚本内)在 HP-UX。
【解决方案2】:

你可以使用

sqlplus user/pass@service_name @$MYSQLFILE

在SQLPLUS里面,也可以使用

sql> host echo $MYSQLFILE

这也是有效的,

sqlplus user/password@db <<EOF
  @$MYSQLFILE
  exit;
EOF

【讨论】:

  • 单行命令运行良好:sqlplus user/pass@service_name @$MYSQLFILE。 EOF 正是我在这里打开这个问题时尝试做的,但它不起作用,至少在我的环境中不起作用。
  • 很高兴您解决了问题。如果您认为此答案对您有用,请考虑投票和/或将其标记为答案,以便社区也可以从中受益:) 谢谢
  • 用不同的方法解决了问题,问题没有得到准确的回答,但是好的。
  • 如果有其他方法,您可以与我们分享您的实践吗?除此之外,我并不是要检查我的帖子作为答案,但如果您认为其中任何一个与您的问题相关,您应该将其标记为答案。这就是社区的运作方式,也是我们分享知识的方式
  • 好的,基本上我使用了 1 行 sqlplus 调用,但还必须在 SQL 文件中包含集合、提交和退出,因为一切都应该在 SQL 文件中完成,因为我可以不要使用 EOF(它在我的系统中不起作用)。
猜你喜欢
  • 2021-10-25
  • 2015-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-17
  • 2019-11-09
  • 2014-02-02
  • 2016-12-26
相关资源
最近更新 更多