存儲過程日期參數
1. oracle 存儲過程 輸出一個日期 如果周六 print1 否則 print0
create or replace PROCEDURE p_week
(v_date in varchar2)
as
v_int varchar2(1);
begin
select to_char(to_date(v_date,'yyyy-mm-dd'),'d') into v_int from al;
if v_int=7
then
dbms_output.put_line(1);
else
dbms_output.put_line(0);
end if;
end;
輸入日期格式必須是2013-05-09 這樣格式的
2. ORACLE 存儲過程 建立時間類變數
V_DATE DATE;
SELECT TRUNC(SYSDATE,'MM') INTO V_DATE FROM DUAL;
SELECT LAST_DAY(SYSDATE) INTO V_DATE FROM DUAL;
SELECT TRUNC(ADD_MONTHS(SYSDATE,-1),'MM') INTO V_DATE FROM DUAL;
SELECT LAST_DAY(ADD_MONTHS(SYSDATE,-1)) INTO V_DATE FROM DUAL;
SELECT TRUNC(ADD_MONTHS(SYSDATE,-11),'MM') INTO V_DATE FROM DUAL;
SELECT LAST_DAY(ADD_MONTHS(SYSDATE,-11)) INTO V_DATE FROM DUAL;
SELECT TRUNC(ADD_MONTHS(SYSDATE,-12),'MM') INTO V_DATE FROM DUAL;
SELECT LAST_DAY(ADD_MONTHS(SYSDATE,-12)) INTO V_DATE FROM DUAL;
3. 關於ORACLE用JOBS調用存儲過程,該存儲過程已創建了,兩個OUT參數,如何在每天18點准時調用
BEGIN
sys.dbms_scheler.create_job(
job_name => '"JOB_名稱"',
job_type => 'PLsql_BLOCK',
job_action => '
DECLARE
V_RQ VARCHAR2(10);--存儲過程需要的參數
V_FLG VARCHAR2(4000);--存儲過程需要的參數
BEGIN
SELECT TO_CHAR(SYSDATE - 1,''YYYY-MM-DD'') INTO V_RQ FROM DUAL;
存儲過租沒程名稱團早(V_RQ, V_FLG);
IF V_FLG <> ''1'' THEN
RAISE_APPLICATION_ERROR(-20001,V_FLG);
END IF;
END;',
repeat_interval => 'FREQ=DAILY;BYHOUR=1;BYMINUTE=0;BYSECOND=0',
start_date => to_timestamp_tz('2011-08-04 +18:00', 'YYYY-MM-DD TZH:TZM'),
job_class => 'DEFAULT_JOB_CLASS',
comments => 'JOB描述信息',
auto_drop =>塌型雀 FALSE,
enabled => TRUE);
END;
這是JOB的一個例子,我對一些具體名稱進行了注釋,如果日期需要靈活的可以動態作為參數傳遞執行的日期。
4. sql中如何設置存儲過程的默認值為當前日期
存儲過程參數的默認值只允許常量和null. 可以做如下修改:
create proc proc_borrow
@willdate datetime=null,@retumdate datetime=null
as
select * from Borrow where WillDate between isnull(@willdate,dateadd(yy,-1,GETDATE())) and isnull(@retumdate,GETDATE())
go
5. 可否幫我舉一個oracle的存儲過程 並且要帶輸入輸出參數 還有如何調用的語句
reate or replace procere get_content_river(cxrq in varchar2,--查詢日期
fsr in varchar2,--發送人自動發送寫自動發送
content out varchar2,
bz out varchar2,--0為失敗1為成功
msg out varchar2) is
v_zm varchar2(50);
v_xzqy varchar2(20);
v_xzbm varchar2(20);
n_jjsw number(10,3);
n_bzsw number(10,3);
v_type varchar2(2);
cursor cur_st_river_r(cxsj varchar2)is
select *
from st_river_r
where substr(to_char(st_river_r.ymdhm,'yyyy-mm-dd'),1,10) = cxsj;
rec_st_river_r st_river_r%rowtype;
begin
msg:='';
content:='';
bz := '1';
v_type := '1';--默認為人工
open cur_st_river_r(cxrq);
loop
fetch cur_st_river_r into rec_st_river_r;
exit when cur_st_river_r%notfound;
--取得警戒水位\保證水位
begin
select cshct.alwtlv,cshct.gnwtlv into n_jjsw,n_bzsw from CSHCT where cshct.ennmcd = rec_st_river_r.ennmcd;
exception
when others then
n_jjsw :=0;
n_bzsw :=0;
end;
--判斷
if n_jjsw <= rec_st_river_r.zr then
--取得站名
begin
select prnmsr.ennm into v_zm from prnmsr where prnmsr.ennmcd = rec_st_river_r.ennmcd;
exception
when others then
v_zm :='無';
end;
--行政區域編碼
begin
select DSEN.DSCD into v_xzbm from dsen where dsen.ennmcd = rec_st_river_r.ennmcd;
exception
when others then
v_xzbm :='無';
end;
--取得行政區域名稱
begin
select DSCDNM.DSNM into v_xzqy from dscdnm where dscdnm.dscd = v_xzbm;
exception
when others then
v_xzqy := '無';
end;
content:= content||'報警站名稱:'||v_zm||';'||'行政區名稱:'||v_xzqy||';'||'當前水位:'||to_char(rec_st_river_r.zr)||';'
||'警戒水位:'||n_jjsw||';'||'保證水位:'||n_bzsw||';';
end if;
end loop;
if fsr = '自動發送' then
v_type := '2';
end if;
if length(content)> 0 then
--插入簡訊記錄表 message
insert into message(
ID,
CONTENT,
SENDDATE,
REPLY,
PERSON,
TYPE,
CONTENTTYPE)
values
(
seq_message.nextval,
content,
sysdate,
'2',
fsr,
v_type,
'2'
);
end if;
close cur_st_river_r;
exception
when others then
if cur_st_river_r%isopen then
close cur_st_river_r;
bz := 0;
end if;
content := '-1';
msg := SQLERRM;