【发布时间】:2016-02-14 10:56:16
【问题描述】:
我有这么长的 SQL 语句块,我需要为它创建一个接受 3 个变量的存储过程。变量是 invoice、NewDate、TransactionDate,数据类型分别是 integer、date 和 date。我试图创建存储过程,但语法把我弄乱了。我将使用 Coldfusion 和 cfstoredproc 调用存储过程,因此使用井号。并不是说我在 ColdFusion 上需要任何帮助。只是试图提供尽可能多的信息。
truncate table fix_the_date; commit;
insert into fix_the_date
(Location,Invoice,NewDate,TransactionDate)
values
('Corporate', '#invoice#'
, to_date('#NewDate#', 'mm/dd/yyyy')
,to_date('#TransactionDate#','mm/dd/yyyy'));
commit;
<!--- About a dozen other queries go here that I won't waste your time with--->
更新 1: 以下是我现在所拥有的存储过程。我收到以下错误:
执行数据库查询时出错。 [宏媒体][Oracle JDBC 驱动程序][Oracle]ORA-01858: 发现一个非数字字符 数字是预期的 ORA-06512:在“THEDB.FIXMISSINGDATE”,第 13 行 ORA-06512: 在第 1 行错误发生在第 4 行
CREATE OR REPLACE PROCEDURE THEDB."FIXMISSINGDATE" (Invoice integer, NewTransactionDate date, TransactionDate date) IS
BEGIN
EXECUTE IMMEDIATE 'TRUNCATE TABLE FixTheDate;
commit;
EXECUTE IMMEDIATE 'TRUNCATE TABLE DeletePayTrans';
commit;
insert into FixTheDate(Site, Invoice_No, Pay_Date, Old_Date)
values ('Corporate', 'TO_CHAR(#Invoice#)','#NewTransactionDate#','#TransactionDate#');
commit;
/*******************************
Plus a bunch of other queries here
*******************************/
END FIXMISSINGDATE;
/
更新 2:根据 cmets 中的反馈,删除英镑符号
CREATE OR REPLACE PROCEDURE THEDB."FIXMISSINGDATE" (Invoice integer, NewTransactionDate date, TransactionDate date) IS
BEGIN
EXECUTE IMMEDIATE 'TRUNCATE TABLE FixTheDate;
commit;
EXECUTE IMMEDIATE 'TRUNCATE TABLE DeletePayTrans';
commit;
insert into FixTheDate(Site, Invoice_No, Pay_Date, Old_Date)
values ('Corporate', TO_CHAR(Invoice), NewTransactionDate, TransactionDate);
commit;
/*******************************
Plus a bunch of other queries here
*******************************/
END FIXMISSINGDATE;
/
【问题讨论】:
-
如果您使用
to_date函数将数据类型转换为日期,则您的数据类型不能是日期。 -
在 Oracle 中,
truncate table和所有 DDL 在执行开始和结束时执行隐式提交。所以第一次提交是多余的。 -
从 ColdFusion 连接时也不需要最后一次提交。此外,将日期或时间戳对象从 ColdFusion 传递到您的 SP。不要乱搞字符串。
-
问题是如何将它们放在一个存储过程中。
-
另外,不确定这是否是复制+粘贴错误,但您在 EXECUTE IMMEDIATE 语句之一的末尾缺少结束引号。
标签: oracle plsql coldfusion