在plsql中寫儲存過程時,需要寫 要執行的sql語句,在這個語句中變數應該這樣: '||變數||' ,成為變數的值。
如果變數需要加『』 ,那麼就得 『『『||變數||』』』。
如果變數上加兩個『』,就是這樣 '『||變數||』',那麼就變成 變數的名字,而不是變數的值。
不是變數的量,如果需要加『』,那麼這樣,『『yyyy-mm-dd』』;
一 是 關於plsql中寫在sql中的變數
不是變數的量,如果加雙『』,或者加 三個『』。系統就提示是錯誤的。
如: v_exec_sql:=v_exec_sql||' partition by range (start_time) '||
' (partition pt'||v_num|| ' values less than (to_date('''||v_char2||''',''yyyy-mm-dd'')),';
當列印時變成:create table zhzc.sd_norate_usage_events_200706
partition by range (start_time)
(partition pt1 values less than (to_date('2007-06-02','yyyy-mm-dd'),
partition p40 values less than (maxvalue) )
as select * from sd_norate_usage_events_
同時注意:『』一般是來包括 語句的,如:v_exec_sql:='create table aa ';
而||和|| 是用來包括 變數的,也用來換行的,如: v_exec_sql := 'create table zhzc.' || v_tab_name || '_' || v_now_month || ' as '
|| 'select * from zhzc.' || v_tab_name; 注意最後的那個變數就不用||了 。倒數第二個 || 是用來換行的。
二:建立分割槽表
create table zhzc.sd_norate_usage_events_200706
partition by range (start_time)
( partition pt1 values less than (to_date('2007-06-02','yyyy-mm-dd'),
partition p40 values less than (maxvalue) )
as select * from sd_norate_usage_events_
也可以這樣:
create table zhzc.sd_norate_usage_events_200706 (id int,start_time date)
partition by range (start_time)
( partition pt1 values less than (to_date('2007-06-02','yyyy-mm-dd'),
partition p40 values less than (maxvalue) )
查詢某個分割槽時:
select *from sd_norate_usage_events_200706 partition (pt1)
三:注意 plsql中迴圈的操作
v_exec_sql:=v_exec_sql||' partition pt'||v_num||' values less than (to_date('''||v_char2||''',''yyyy-mm-dd'')),';
v_num:=v_num+1;
exit when v_num=3;
得到create table sd_norate_ partition by range (start_ti)
( partition pt1 values less than (to_date('2007-06-02','yyyy-mm-dd')),
partition pt2 values less than (to_date('2007-06-03','yyyy-mm-dd')),
partition p40 values less than (maxvalue) )
30時就不執行
對比:v_exec_sql:=v_exec_sql||' partition pt'||v_num||' values less than (to_date('''||v_char2||''',''yyyy-mm-dd'')),';
exit when v_num=3;
v_num:=v_num+1; ----注意:不是v_num:=+1;
3時是否執行?
得到結果:
create table sd_norate_
partition pt1 values less than
partition pt2 values less than
partition pt3 values less than
partition p40 values less than (maxvalue) )
而:while迴圈
while i<=3 loop
v_char:=trim(to_char(i+01,'00'));
v_char2:=trim(''||v_mon||'-'||v_char||'');
bb:=bb||' partition pt'||i||' values less than ';
i:=i+1; --不能是i:=+1;
end loop;
bb:=bb||'partition p40 values less than (maxvalue) ) ';--||
得到結果:
create table sd_norate_
partition pt1 values less than
partition pt2 values less than
partition pt3 values less than
partition p40 values less than (maxvalue) )
五:關於plsql的if
有兩種寫法:
if() then
else
end if;
2是:if() then
elsif () then
elsif () then
end if;
六:建立表並且放在某個表空間裡
create table aa(id int ,name varchar2(10)) tablespace tbs_ind;
七:對比(plsql中的)
v_exec_sql := 'select distinct constraint_name from user_constraints where ' ||
'owner=''' || v_tab_schema || ''' and ' ||
'constraint_type=''p'' and ' ||
'table_name=''' || v_tab_name || '''';
v_exec_sql := 'select distinct index_name from all_indexes where ' ||
'owner=''' || v_tab_schema || ''' and ' ||
'table_name =''' || v_tab_name || '''';
和select count(0) into v_exist_num from all_tables t
where t.owner=v_tab_schema and t.table_name=trim(v_tab_name);
前兩個是 需要在加 execute immediate v_exec_sql; 來執行的語句。而最後乙個是在plsql中直接就執行的語句。
八:sybase不提供子表查詢,需要用到臨時表。而oracle提供子表查詢
sybase中的
第一步建立臨時表:
select employ, name, bz into #abc
from zhcx_bigcust_zksk b where b.bz = '1' and area_id = '05000002'
select a.employ from #abc a
第二步:聯接
select d.name, d.employ, null(c.plan_value, 0) plan_value, d.bz
from zhcx_assess_plan c right join #abc d
on c.sales_id = d.employ and c.year_plan = 2007
在oracle中:
select d.name, d.employ, null(c.plan_value, 0) plan_value, d.bz
from zhcx_assess_plan c right join (select employ, name, bz
from zhcx_bigcust_zksk b
where b.bz = '1'
and area_id = '05000002') d on c.sales_id =
d.employ
and c.year_plan = 2007
九 關於rename表
是這樣: rename aa to aa_zhang
而不是 rename zhzc.aa to zhzc.aa_zhang 或者是rename aa to zhzc.aa_zhang
是因為rename時不要模式名的。
PL SQL學習筆記
from ebs pl sql儲存過程報表輸出 1.fnd file.put line fnd file.log,l err idx 從mes表獲取tool id tool.tool id 出現異常錯誤!2.fnd file.put line fnd file.output,文字輸出內容.獲取物件結...
PL SQL學習筆記
1 啟動sqlplus crtl r sqlplus 啟動sqlplus 輸入使用者名稱密碼登陸oracle 輸出hello world!ps sql set serveroutput on 這句不寫的話不會有結果輸出 sql begin 2 dbms output.put line hello w...
oracle學習筆記 PL SQL
pl sql 它是一種過程化語言,在pl sql中可以使用if語句或是log語句,以實現控制程式的執行流程,甚至可以定義變數,以至在語句之間傳遞資料資訊,這樣pl sql語言就能夠實現操控程式處理的細節,因此使用pl sql語句可以實現比較複雜的業務邏輯,它是oracle的專用語言,它是對標準sql...