Oracle基礎文法

來源:互聯網
上載者:User

標籤:procedure   定義   受限   count   文法   declare   rtt   計算   rac   

=========================Oracle資料庫簡單語句============

--%TYPE類型--SQL> declare var_name varchar2(100);--ZM_TREE.Fname%type; var_type varchar2(100);--ZM_TREE.Flinktype%type; begin SELECT t.fname,t.flinktype into var_name,var_type from zm_tree t where flinktype=‘公司‘;--單條記錄輸出 dbms_output.put_line(var_name||‘ 類型為: ‘||var_type); end; --record類型--SQL> declaretype emp_type is record(var_name varchar2(20),var_type varchar2(20),var_sort varchar2(200));empinfo emp_type;begin--查詢的順序和record的定義的順序是一樣的select t.fname,t.flinktype,t.fsort into empinfo from ZM_TREE t where t.flinktype=‘公司‘;--單條記錄輸出dbms_output.put_line(‘名稱:‘||empinfo.var_name||‘——類型:‘||empinfo.var_type||‘——排序:‘||empinfo.var_sort);end;--%rowtype類型--SQL> declarerowVar_emp ZM_TREE%rowtype;beginSELECT * into rowVar_emp FROM ZM_TREE t where t.flinktype=‘公司‘;/*輸出資訊*/--單條記錄輸出dbms_output.put_line(‘名稱:‘||rowVar_emp.fname||‘——類型:‘||rowVar_emp.FLINKTYPE||‘——排序:‘||rowVar_emp.Fsort);end;--變數 常量var_str varchar2(30):=‘中國‘;var_num constant number(8,4):=20;--secondday--》》》流程式控制制--if--SQL> declare var_str1 varchar2(200);var_str2 varchar2(300);begin var_str1:=‘121321‘; var_str2:=‘21321321‘;if length(var_str1)>length(var_str2) then dbms_output.put_line(var_str1); else dbms_output.put_line(var_str2);end if;end;--if elseif --SQL> declarenum_age int :=&請輸入年齡;beginif num_age>=56 thendbms_output.put_line(‘您可以申請退休了‘);elsif num_age<56 thendbms_output.put_line(‘您小於56歲,不可以申請退休!‘);elsedbms_output.put_line(‘對不起,年齡不合法!‘);end if;end;--SQL> declarenum_age int :=&請輸入年齡;aboutinfo varchar2(50);beginif num_age>=56 thenaboutinfo:=num_age||‘您可以申請退休了‘;elsif num_age<56 thenaboutinfo:=num_age||‘您小於56歲,不可以申請退休!‘;elseaboutinfo:=num_age||‘對不起,年齡不合法!‘;end if;dbms_output.put_line(aboutinfo);end;--Casedeclareseason int :=&請輸入季度數字;aboutinfo varchar(50); begin case season when 1 then aboutinfo:=season||‘季度包含1,2,3月度‘; when 2 then aboutinfo:=season||‘季度包含4,5,6月度‘; when 3 then aboutinfo:=season||‘季度包含7,8,9月度‘; when 4 then aboutinfo:=season||‘季度包含10,11,12月度‘; else aboutinfo:=‘輸入的值不合法‘; end case; dbms_output.put_line(aboutinfo); end; --》》》迴圈語句--loop語句 一直運行到exit when end_condition_exp 為true時退出declaresum_i int:=0;i int:=0;begin loop i:=i+1; sum_i :=sum_i + i; exit when i = 100;end loop;dbms_output.put_line(‘前100個自然數的和是:‘||sum_i);end;--while迴圈declare sum_i int:=0;var_i int:=0;beginwhile var_i<100 loop var_i:=var_i+1; sum_i:=sum_i+var_i; end loop; dbms_output.put_line(‘前100個自然數的和是:‘||sum_i); end;--for 語句declaresum_i int:=0;begin for i in reverse 1..100 loop -- reverse 表示i從100遞減 sum_i:= sum_i+i; end loop;dbms_output.put_line(‘前100個自然數的和是:‘||sum_i);end;--》》》遊標/*遊標屬性:cur_tmp%found 至少影響到一行資料為true;cur_tmp%notfound 與%found相反cur_tmp%rowcount 返回受SQL語句影響的行數cur_tmp%isopen 遊標開啟時為true*/declarecursor cur_emp(var_ID in varchar2:=‘lili‘)is select t.flinkcode,t.fname,t.flinktypefrom ZM_TREE twhere flinkcode like var_ID||‘%‘;type record_emp is record(var_name ZM_TREE.FLINKCODE%type,var_type ZM_TREE.Fname%type,var_sort varchar2(200));emp_row record_emp;begin DBMS_OUTPUT.ENABLE(buffer_size => null);--表示輸出buffer不受限制 open cur_emp(‘2‘);--得到遊標值 fetch cur_emp into emp_row;--迴圈遊標 while cur_emp%found loop dbms_output.put_line(‘名稱:‘||emp_row.var_name||‘——類型:‘||emp_row.var_type||‘——排序:‘||emp_row.var_sort); fetch cur_emp into emp_row; end loop; close cur_emp;--關閉遊標end;--for 中使用cursor 不用進行開啟遊標、讀取遊標、關閉遊標 oracle內部自動完成declarevar_ID varchar2(200):=&輸入編碼;cursor cur_emp isselect t.flinkcode var_name,t.fname,t.flinktype from ZM_TREE t where flinkcode like var_ID||‘%‘;begin DBMS_OUTPUT.ENABLE(buffer_size => null); --表示輸出buffer不受限制 for emp_info in cur_emp loop --顯示的名稱和列別名稱一樣 dbms_output.put_line(‘名稱:‘||emp_info.var_name||‘——類型:‘||emp_info.fname||‘——排序:‘||emp_info.flinktype); end loop;end;begin DBMS_OUTPUT.ENABLE(buffer_size => null); --表示輸出buffer不受限制 for emp_info in (select t.flinkcode var_name,t.fname,t.flinktype from ZM_TREE t where flinkcode like ‘2%‘) loop dbms_output.put_line(‘名稱:‘||emp_info.var_name||‘——類型:‘||emp_info.fname||‘——排序:‘||emp_info.flinktype); end loop;end;--》》》異常處理/*預定義異常自訂異常*/--預定義異常declarevar_empno t_cscustomer.cust_no%type;var_empname t_cscustomer.cust_name%type;beginselect cust_no,cust_name into var_empno,var_empname from t_cscustomer where cust_no like ‘00%‘;if sql%found then dbms_output.put_line(‘僱員編號:‘||var_empno||‘、名稱:‘||var_empname);end if;exception when too_many_rows then dbms_output.put_line(‘返回記錄超過一行‘); when no_data_found then dbms_output.put_line(‘無資料記錄‘);end;/*drop table dept_tmp; create table dept_tmp( DEPT_NO VARCHAR2(12) primary key not null, DEPT_NAME VARCHAR2(50), LOCATION VARCHAR2(200));*/create or replace procedure pro_insertTmp isbegin insert into dept_tmp values(1,‘市場拓展部‘,‘join‘); commit; dbms_output.put_line(‘插入dept_tmp新記錄成功‘);end pro_insertTmp;--執行pro_insertTmp--execurte pro_insertTmp;exec pro_insertTmp;begin pro_inserttmp; end; /**預存程序參數過程包括:in 輸入參數、out 輸出參數、in out可被修改的輸入參數,並作為輸出參數**/-->>increate or replace procedure pro_insertDept(v_deptno in varchar2,v_deptname in varchar2,v_loc in varchar2) isbegin insert into dept_tmp values(v_deptno,v_deptname,v_loc); commit; dbms_output.put_line(‘通過in參數插入dept成功!‘);end pro_insertDept; --不按順序傳入參數,指定參數值declare i int:=1;begin while i<20 loop -- pro_insertDept(v_deptname=>‘採購部‘,v_loc=>‘成都‘,v_deptno=>‘2‘); pro_insertDept(v_deptno => i,v_deptname => ‘採購部‘||i,v_loc => ‘成都‘||i); i:=i+2; end loop;end;-->>outcreate or replace procedure pro_selectDept(v_deptno in varchar2,v_deptname out dept_tmp.dept_name%type,v_loc out dept_tmp.location%type) isbegin select dept_name,location into v_deptname,v_loc from dept_tmp where dept_no=v_deptno;exception when no_data_found then dbms_output.put_line(‘該編號的部門不存在!‘);end pro_selectDept;declarevar_deptname dept_tmp.dept_name%type;var_loc dept_tmp.location%type;var_deptno dept_tmp.dept_no%type:=&21;begin pro_selectDept(var_deptno,v_deptname => var_deptname,v_loc => var_loc); dbms_output.put_line(var_deptname||‘位於:‘||var_loc); end; variable v_deptname varchar2(50);variable v_loc varchar2(50);exec pro_selectDept(‘1‘,:v_deptname,:v_loc);print v_deptname v_loc;select :v_deptname,:v_loc from dual;create or replace procedure pro_square(num in out number,flag in boolean) isi int:=2;begin if flag then num := power(num,i); --計算平方 else num := sqrt(num); --計算平方根 end if;end pro_square;

  

Oracle基礎文法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.