문제 설명
3개의 변수가 있는 저장 프로시저 작성을 위한 plSQL 구문 (plSQL Syntax For Writing Stored Procedure w/ 3 Variables)
3개의 변수를 허용하는 저장 프로시저를 만드는 데 필요한 이 긴 SQL 문 블록이 있습니다. 변수는 송장, NewDate, TransactionDate이고 데이터 유형은 각각 정수, 날짜 및 날짜입니다. 저장 프로시저를 만들려고 했지만 구문이 엉망입니다. 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: 다음은 현재 저장 프로시저에 대한 정보입니다. 다음 오류가 발생합니다.
데이터베이스 쿼리 실행 중 오류가 발생했습니다. [매크로미디어][오라클 JDBC 드라이버][오라클]ORA‑01858:
참조 솔루션
방법 1:
Your issue probably relates to trying to issue DDL statements in a stored procedure (see here).
I'm going to assume that your
NewDate
andTransactionDate
are also varchar2 (since your insert statement won't work if they're actually dates).CREATE OR REPLACE PROCEDURE my_proc( invoice IN integer, NewDate IN varchar2, TransactionDate IN varchar2) AS BEGIN EXECUTE IMMEDIATE 'TRUNCATE TABLE fix_the_date'; 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; END; /
...or if you really are passing dates:
CREATE OR REPLACE PROCEDURE my_proc( invoice IN integer, NewDate IN date, TransactionDate IN date) AS BEGIN EXECUTE IMMEDIATE 'TRUNCATE TABLE fix_the_date'; INSERT INTO fix_the_date (Location,Invoice,NewDate,TransactionDate) VALUES ('Corporate', invoice, NewDate, TransactionDate); COMMIT; END; /
참조 문서