如何在oracle程序中传递日期参数?

Bal*_*a S 8 sql oracle

以下是示例程序代码,

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;
/
Run Code Online (Sandbox Code Playgroud)

Q1:这是直接在程序中传递日期的正确方法吗?Q2:如果没有,我可以在程序中传递varchar,来转换声明部分中的日期吗?Q3:在运营商之间开始部分使用,我可以直接通过程序参数吗?

在执行此程序时,exec pro_test('10102015','30102015');我需要在句子之间提及什么?start_date和end_date之间是否足够或我需要屏蔽日期格式?

有人可以帮我清楚吗?

Lal*_*r B 9

Q1:这是直接在程序中传递日期的正确方法吗?

是.

Q3:在运营商之间开始部分使用,我可以直接通过程序参数吗?

不确定你的意思,但你的插入声明没问题.您正在传递DATE作为参数并插入表中.

在我看来,所有这些都可以在纯SQL中的单个INSERT..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>);
Run Code Online (Sandbox Code Playgroud)

更新每个OP的评论:

在执行此过程时,exec pro_test('10102015','30102015'); 在句子之间我需要提到什么?start_date和end_date之间是否足够或我需要屏蔽日期格式?

'10102015'不是DATE,它是一个字符串文字.您必须将其作为DATE传递,因此您必须使用正确格式掩码的TO_DATEANSI Date文字,因为您没有任何时间部分.ANSI Date literal使用固定格式'YYYY-MM-DD'.

例如,

使用TO_DATE:

EXEC pro_test(TO_DATE('10102015','DDMMYYYY'),TO_DATE('30102015','DDMMYYYY'));
Run Code Online (Sandbox Code Playgroud)

使用ANSI Date文字:

EXEC pro_test(DATE '2015-10-10', DATE '2015-10-30');
Run Code Online (Sandbox Code Playgroud)