【问题标题】:Issues with select statement in sql loadersql loader中select语句的问题
【发布时间】:2017-01-22 17:30:25
【问题描述】:

我不确定这是否可能,但这是我在 sql 加载程序文件中选择表达式的问题。

我有两张桌子。

表 1

IDENTITYNUMBER

ID NUMBER
100 8
200 9

表 2

TESTTABLE

NAME ID
John 100  

加载器 sql 的数据文件

Jim,8
Carol,9

现在,我想通过将第二个数字替换为第一个表中的 id 来将这些数据加载到测试表中。

这就是我的 test.ctl 文件的样子

load data
append
into table testtable
fields terminated by ',' optionally enclosed by '"'
(
NAME,
ID EXPRESSION "(select i.id from identitynumber i where i.number = :ID)"
)

但我不断收到此错误: SQL*Loader-291:列 ID 的 SQL 字符串中的绑定变量 ID 无效

我希望表 2 在加载器脚本成功执行后看起来像这样。

TESTTABLE

    NAME  ID
    John  100 
    Jim   100
    Carol 200

任何指针将不胜感激。

【问题讨论】:

  • 您是否考虑过加载到临时表,然后运行脚本进行解析,然后使用正确的键插入数据?
  • 是的,我可以做到,而且非常简单。但是,我不想在数据库中创建一个新表。
  • 我认为单词“EXPRESSION”后面的单双引号是一个印刷错误,或者这可能是错误的原因吗?此外,您可以将此标量查询设为函数。关于函数,在控制文件中调用函数是有据可查的。

标签: sql oracle sql-loader


【解决方案1】:

不要“表达”

ID "(从 identitynumber i 中选择 i.id 其中 i.number = :ID)"

【讨论】:

    【解决方案2】:

    我认为在 sqlldr EXPRESSION 中不允许使用 select 功能是:

    create function idtestfun(p_num in number) return number
    is
      l_num number;
    begin
      select id into l_num from identitynumber where "number"= p_num;
      return l_num;
    end;
    

    并使用它 sqlldr 配置:

    ID "idtestfun(:ID)"
    

    【讨论】:

    • 非常感谢。功能始终是解决问题的一种方式。但是,我想我正在寻找更短的方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-13
    • 2011-03-16
    • 1970-01-01
    • 2023-04-11
    • 1970-01-01
    • 2012-08-05
    相关资源
    最近更新 更多