@戴维德。谢谢。现在终于成功了。我一直很怀疑在FME中找到正确的符号,和准确的很难找到例子。做错事太容易了。非常感谢你。
对不起的,看起来我的参数顺序不对。这应该有效:
结束日期(“@value(d\u start)”,'YYYYMMDDHH24未命中')
“结束日期”功能的文档也可能有用:https://www.technonthenet.com/oracle/functions/to ou date.php
不是说,D_Start总是需要一个值,它不能是暂时的或丢失的。
@戴维德。谢谢,戴维。我希望事情能这么简单。我试过几次组合使用引号,但没有结果。这次我收到这个消息:
没有成功;错误为'ORA-01821:无法识别日期格式
看起来您省略了日期值字符串周围的单引号。试试这个:
结束日期(“YYYYMMDDHH24未命中”,'@value(d_start)')
@戴维德,对,我尝试了几种不同的技巧,作为程序中有或没有的论点。要么我有语法错误,或者我收到这样的错误消息:
属性(字符串):`'u reader_error'的值为'a error occurred while accessing a table result for feature type`';消息是'execution of statement'begin fpo.package.xxxx(100005,“基姆”“29209139”,“29209139”,“轮胎漂移”,“迁移1”结束日期(“YYYYMMDDHH24未命中”,20160524133000));
end;“”没有成功;错误为'ora-06550:行1,第116栏:
PLS-00307:与此调用匹配的“到\日期”声明太多
SQLExecutor中的调用如下所示:
fme_sql_分隔符/
开始fpo.package.xxxx(@value(sagsid),'@value(n_anmelder)','@value(v_telefon)','@value(v_telefon)','@value(t_haendelse_type)',@值(init)托达特YYYYMMDDHH24未命中',@值(d_start));
结束;
/
你有没有尝试过我下面处理日期/时间戳的技巧?
嗨,你好!最后,它起作用了——但是有一些限制。
似乎你的程序中不能有“入-出”的论点,如果它在包中(没有返回值)。
并且在定义为日期的过程中,不能将Oracle日期属性直接解析为参数。
有没有人有解决这些“问题”的方法?
另一个潜在的陷阱是“日期”参数类型。您可能需要格外小心,以便它以Oracle理解的格式出现。如果您的参数是“FME日期格式”,您可以将其转换为这样的Oracle日期对象
结束日期(‘YYYYMMDD’,'@value(我的'fme'u date'u属性)'
或
结束日期(“YYYYMMDDHH24未命中”,'@value(我的'fme'u date'u属性)'
错误信息是否仍然完全相同?一字不差?
您有DBA可以与之讨论这个问题吗?如果不知道具体的配置方式和调用过程的方式,很难进行调试。
@大卫:看起来“非常”像这样:
程序AAAAAA _p(
X进出编号,
varchar2中的y(200字节),
数字Z(20,0),
W为数字(20,0),
varchar中的p(200字节),
日期:
varchar2中的r(10字节));
您还可以考虑联系您的DBA,并询问如何调用存储过程的具体示例,并将其发布在这里,如果可能的话
你能(允许)在这里发布函数头吗?这样我们就能知道函数期望的是什么?
@戴维德。再来一次-我也试试。但你是完全正确的——这只是一个用正确语法编写SQL字符串的问题,我很困惑,那就太难了。
不知道程序声明很难分辨,但如果不能从FME中调用程序,我会感到惊讶,因为FME基本上只是将SQL作为字符串发送给Oracle,让数据库处理其余的。所以基本上,只有您自己在FME中正确地“构建”SQL命令字符串。
这就是说,你试过类似的东西吗
声明我的输出参数号:=@value(my fme _属性);开始我的_schema.my _package.my _函数(my _参数=>my _output _参数);结束;
@戴维德。再次感谢你的努力。然而,似乎不管什么符号,我用做论据,我收到同样的错误信息。然而,参数也定义为输出。过程中的out或in out参数是否可以在sqlExecutor中使用?
基于Oracle错误消息,我猜测过程“kontakt_p”需要一个整数值作为第一个参数(主键?).因为传递的参数周围有引号,它被隐式地解析为字符串而不是整数。所以我的建议是尝试删除第一个参数周围的引号。
所以基本上你是这样做的:
开始我的_schema.my_package.my_函数(my_参数=>@value(my_fm_属性));结束;
而不是这样:
开始我的_schema.my_package.my_函数(my_参数=>'@value(my_fme_属性)';结束;
@戴维德。谢谢。我现在可以叫程序了,但失败了,因为我的论点列表中有一些错误-第一个论点显然,哪个是主键??
但我不明白为什么??
访问功能类型“”的表结果时出错;消息是'execution of statement'begin sch_flotssagervs.detail_merge.kontakt_p('53802',“Kim Kruse”“29209139”,“29209139”,“轮胎漂移”,'20160524133000',“迁移1”;
end;“”没有成功;错误为'ora-06550:行1,第51栏:
PLS-00363:表达式“53802”不能用作分配目标
ORA-06550:1号线,第10栏:
end;“”没有成功;错误为'ora-06550:行1,第51栏:
PLS-00363:表达式“53802”不能用作分配目标
ORA-06550:1号线,第10栏:
您可以使用sqleexecutor中的匿名块来执行,例如:
开始我的_schema.my_package.my_函数(my_参数=>'@value(my_fme_属性)';结束;
注意:你应该不使用fme_sql_分隔符在这种情况下。