【问题标题】:return value of select query using oracle sql plus in korn shell在 korn shell 中使用 oracle sql plus 选择查询的返回值
【发布时间】:2016-01-11 00:19:32
【问题描述】:

我使用下面的代码从 oracle 返回值。但无法得到 想要的结果。

编辑:使用实际值发布函数。

function Check_Job_Info 
{
    print "Start week -Check_Job_Info : $start_week " 1>&2;
    print "End Week - Check_Job_Info : $end_week " 1>&2;
    JOBNUM=`sqlplus -s username/pwd@db <<EOF
    SET PAGESIZE 0 FEEDBACK OFF VERIFY OFF HEADING OFF ECHO OFF
    SELECT job_number FROM jobs_list WHERE start_week = 1347 and end_week = 1347 ;
    EXIT;
    EOF`
    print "Job Exists  : $JOBNUM " 1>&2;
}

打印的值也和硬编码的值一样

问题是返回的值实际上并不存在于表中。所以它返回 job_number 说 1000。当我使用 1000 进行选择时,它不返回任何行。 start_week 和 end_week 的值是数字

JOB_NUMBER                                NOT NULL NUMBER(5)
 TYPE                                      NOT NULL NUMBER(1)
 START_WEEK                                         NUMBER(5)
 END_WEEK                                           NUMBER(5)

查询中可能有什么问题?过去 2 天试图弄清楚这一点。

基本上是检查一行是否存在,如果不存在则插入新行。

【问题讨论】:

  • the value returns doesnt exist 是什么意思?您收到错误消息吗?另外,请提供jobs_list的DDL语句、表格的内容以及您为start_week和end_week提供的参数值。
  • 首先,您的连接字符串不正确。应该是sqlplus -s username/password@db。
  • 在 SO 帖子中更改时放错了位置
  • 提供完整的 shell 脚本以及手动运行时查询的输出。
  • 将完整功能添加到帖子中

标签: oracle unix sqlplus ksh


【解决方案1】:

sqlplus 命令中参数的顺序错误。它应该是 username/password@db 。试试手动连接db就明白了。

JOBNUM=`sqlplus -s username/password@db <<EOF
SET PAGESIZE 0 FEEDBACK OFF VERIFY OFF HEADING OFF ECHO OFF
SELECT job_number FROM jobs_List WHERE start_week = $start_week and end_week = $end_week ;
EXIT;
EOF`

【讨论】:

  • 用户名/密码正确。当我在帖子中更改时。它放错了地方。在问题中更正
  • 在 db 中运行查询会得到什么?
  • 在 db 中运行时返回的 job_number 与我从 korn 得到的不同
  • 这可能是因为变量$start_week 和$end_week 的值。您必须使用完整的 shell 脚本和数据库输出来编辑问题。尝试在每一步(在 sqlplus 命令之前和之后)打印变量值,看看你哪里弄错了。
  • 替换为实际值但没有变化。这可能是一些与事务/会话相关的问题吗?没有在脚本中使用任何事务。并在运行脚本以及在 sqlplus 窗口中使用相同的用户
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-15
  • 2021-03-26
  • 2016-10-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多