오라클 프로시저 내에서 date parameter를 전달하는 방법은?
아래는 샘플 절차 코드입니다.
create or replace procedure pro_test(start_date date, end_date date)
is
begin
insert into test1 select col1, col2, col3 from main where range_date between start_date and end_date;
exception
< what are the exception I need to capture >
end;
/
Q1: 이 방법이 절차 내에서 직접 날짜를 전달하는 올바른 방법입니까?Q2 : 만약 그렇지 않다면, 절차 내에서 varchar를 통과하여 선언 부분에서 날짜를 변환할 수 있습니까?Q3: 연산자 간의 시작 부분에서 절차 매개 변수를 직접 전달할 수 있습니까?
이 절차를 수행하는 동안,exec pro_test('10102015','30102015');
문장 사이에 제가 언급해야 할 것은 무엇입니까?start_date와 end_date 사이에 이 정도면 충분합니까, 아니면 날짜 형식을 마스킹해야 합니까?
누가 이 일을 해명하는 것을 도와줄 수 있습니까?
Q1: 이 방법이 절차 내에서 직접 날짜를 전달하는 올바른 방법입니까?
네.
Q3: 연산자 간의 시작 부분에서 절차 매개 변수를 직접 전달할 수 있습니까?
무슨 뜻인지는 모르겠지만 삽입문은 괜찮습니다.DATE를 매개변수로 전달하고 테이블에 삽입합니다.
제 생각에는 이 모든 것이 한 번의 삽입으로 이루어질 수 있다고 봅니다.순수 SQL로 SELECT 문을 선택합니다.
insert into test1
select col1, col2, col3
from main
where range_date
between TO_DATE(<date_literal>,<format mask>)
and TO_DATE(<date_literal>,<format mask>);
OP당 업데이트 의견:
이 절차를 수행하는 동안 exec pro_test('10102015', '30102015');문장 사이에 제가 언급해야 할 것은 무엇입니까?start_date와 end_date 사이에 이 정도면 충분합니까, 아니면 날짜 형식을 마스킹해야 합니까?
'10102015'
DATE가 아니라 문자열 리터럴입니다.DATE로 전달해야 하므로, 시간 부분이 없으므로 TO_DATE와 적절한 형식 마스크 또는 ANSI Date 리터럴을 사용해야 합니다.ANSI 날짜 문자 그대로 고정 형식 사용'YYYY-MM-DD'
.
예를들면,
TO_DATE 사용하기:
EXEC pro_test(TO_DATE('10102015','DDMMYYYY'),TO_DATE('30102015','DDMMYYYY'));
ANSI 날짜 리터럴 사용:
EXEC pro_test(DATE '2015-10-10', DATE '2015-10-30');
Q1. 어떤 종류의 파라미터가 입력 또는 출력되는지(입력 또는 출력) 절차를 설명해야 합니다. 절차에 따라 입력됩니다.
create or replace procedure pro_test(start_date in date, end_date in date)
당신의 절차에 있는 다른 것들은 괜찮습니다.
특히 주의를 기울이려면 SQL 문에 사용될 때 pl/sql 변수의 네임스페이스를 지정해야 합니다.
create or replace procedure pro_test(start_date date, end_date date)
is
begin
insert into test1
select col1, col2, col3
from main where range_date
between pro_test.start_date and pro_test.end_date;
...
이렇게 하면 SQL 엔진에서 참조된 테이블의 열과 이름이 같을 경우 변수를 "캡처"할 수 없습니다.
일반적으로 사람들은 다음과 같은 방법으로 이를 피하려고 합니다.
create procedure my_procedure (p_customer_id number)
...
where customer_id = p_customer_id
변수 네임스페이스를 사용하면 접두사 없이 깨끗한 인터페이스를 유지할 수 있습니다.
언급URL : https://stackoverflow.com/questions/33932677/how-to-pass-date-parameter-inside-the-oracle-procedure
'programing' 카테고리의 다른 글
exec에서 출력 잡기 (0) | 2023.11.07 |
---|---|
PL/SQL <>의 의미는 무엇입니까? (0) | 2023.11.07 |
원래 변수는 그대로 유지하면서 mutate_at로 새 변수 만들기 (0) | 2023.11.07 |
매크로에서 사용할 수 있는 트릭에는 어떤 것이 있습니까? (0) | 2023.11.07 |
C/C++에서 OpenGL 셰이더를 위한 손쉬운 프레임워크 (0) | 2023.11.07 |