programing

오라클 프로시저 내에서 date parameter를 전달하는 방법은?

muds 2023. 11. 7. 21:09
반응형

오라클 프로시저 내에서 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를 매개변수로 전달하고 테이블에 삽입합니다.

제 생각에는 이 모든 것이 한 번의 삽입으로 이루어질 수 있다고 봅니다.순수 SQLSELECT 문을 선택합니다.

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

반응형