我正在尝试使用oracle数据库中的DBMS_HS_PASSTHROUGH将日期为“YYYYMMDD”的数字格式转换为用户指定的日期,例如“过去7天/ 1个月数据”。
此查询在AS400上运行正常:
SELECT * FROM AGNTPF
WHERE
START_DATE >= DEC(REPLACE(CHAR(CURRENT_DATE - 1 MONTH, ISO), '-', ''), 8, 0) )
但是当我使用网关从oracle运行它时
declare
ret integer;
begin
ret := dbms_hs_passthrough.execute_immediate@P400(
'create TABLE AGNTPF1 AS
(SELECT * FROM AGNTPF WHERE START_DATE >= DEC(REPLACE(CHAR(CURRENT_DATE - 1 MONTH, ISO), '-', ''), 8, 0) ) with data');
end;
/
declare
*
ERROR at line 1:
ORA-06502: PL/SQL: numeric or value error: character to number conversion error
ORA-06512: at line 4
此致
拉夫
答案 0 :(得分:0)
我不知道db2400 / AS400,但对我来说,看起来你传递给你的程序的SQL语句缺少正确的报价转义。这应该有效:
declare
ret integer;
begin
ret := dbms_hs_passthrough.execute_immediate@P40(
'create TABLE AGNTPF1 AS
(SELECT * FROM AGNTPF WHERE START_DATE >= DEC(REPLACE(CHAR(CURRENT_DATE - 1 MONTH, ISO), ''-'', ''''), 8, 0) ) with data');
end;
或者,您可以使用着名的q
运算符(此处,我使用竖线符号|
来标记引用字符串的开头和结尾):
declare
ret integer;
begin
ret := dbms_hs_passthrough.execute_immediate@P40(
q'|create TABLE AGNTPF1 AS
(SELECT * FROM AGNTPF WHERE START_DATE >= DEC(REPLACE(CHAR(CURRENT_DATE - 1 MONTH, ISO), '-', ''), 8, 0) ) with data|');
end;