以下是示例程序代码,
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之间是否足够或我需要屏蔽日期格式?
有人可以帮我清楚吗?
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_DATE或ANSI 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)
| 归档时间: |
|
| 查看次数: |
36731 次 |
| 最近记录: |