oracle之PLSql語言(二)sql語句的使用
1、可執行部分(BEGIN):即begin後的語句
PLSql語言的註釋
1、註釋一行:--
2、註釋多行:/* 多行語句 */
組成語句:
-
- 變數賦值語句。
- 流程控制語句。
- 資料查詢、資料操縱、事務控制語句。
- 遊標語句。
2、可執行部分,SQL語句的注意事項
- 在可執行部分,可以使用SQL語句,但是不是所有的SQL語句都可以使用。
- 可以使用的主要有:SELECT、INSERT、UPDATE、DELETE、COMMIT、ROLLBACK等資料查詢、資料操縱或事務控制命令。
- 不能使用CREATE 、ALTER、DROP、GRANT、REVOKE等資料定義和資料控制命令。
說明:
a:在PL/SQL中,SELECT語句必須與INTO子句相配合,在INTO子句後面跟需要賦值的變數。
b:在使用SELECT...INTO...時,結果只能有一條,如果返回了多條資料或沒有資料,則將產生錯誤。
c:在PL/SQL中,SQL語句的語法和互動命令是一樣的。
使用dbms_output.put_line();輸出語句,必須設定其開啟,
使用set serveroutput on命令,serveroutput預設是關閉的。
如果輸出字串,需要新增單引號才可以。
兩個單引號代表一個單引號
(一)select的使用
declare
v_name emp.ename%type;
v_sal emp.sal%type; //與%rowtype區分開,%type與表中單個欄位的資料型別一致 %rowtype與整個表的資料型別一致
begin
select ename, sal into v_name, v_sal from emp where empno = 7369;
dbms_output.put_line(v_name || ' ' || v_sal);
end;
或者
declare
v_emp emp%rowtype;
begin
select * into v_emp from emp where empno = 7369;
dbms_output.put_line(v_emp.ename);
end;
--insert語句
declare
v_deptno dept.deptno%type := 50;
v_dname dept.dname%type := 'aaa';
v_loc dept.loc%type := 'bj';
begin
insert into dept2 values(v_deptno, v_dname, v_loc);
commit; //一定要提交,否則沒有意義
end;
--update語句
declare
v_deptno emp2.deptno%type := 10;
v_count number;
begin
update emp2 set sal = sal/2 where deptno = v_deptno;
commit; //一定要提交,否則沒有意義
end;
--DDL(資料定義語言)語句的使用
執行ddl語句,需要新增execute immediate
begin
execute immediate 'create table t (nnn varchar2(20) default ''aaa'')';
end;
註釋的使用:(sql%rowcount:表示sql語句影響到了幾條記錄,返回影響的行數)sql是一個關鍵字,rowcount是sql的一個屬性。
declare
v_deptno emp2.deptno%type := 10;
v_count number;
begin
--update emp2 set sal = sal/2 where deptno = v_deptno;
--select deptno into v_deptno from emp2 where empno = 7369;
select count(*) into v_count from emp2;
dbms_output.put_line(sql%rowcount || '條記錄被影響');
commit; //一定要提交,否則沒有意義
end;
--if語句(注意then的使用位置)
取出7369的薪水,如果<1200,輸出'low',如果<2000輸出'middle',否則'high'
declare
v_sal emp.sal%type;
begin
select sal into v_sal from emp
where empno = 7369;
if (v_sal < 1200) then
dbms_output.put_line('low');
elsif (v_sal < 2000)
then
dbms_output.put_line('middle');
else
dbms_output.put_line('high');
end if;
end;
--迴圈(相當於do while)
declare
i binary_integer := 1;
begin
loop
dbms_output.put_line(i);
i := i + 1;
exit when (i >= 11);
end loop;
end;
相當於while迴圈
declare
j binary_integer := 1;
begin
while j < 11 loop
dbms_output.put_line(j);
j := j + 1;
end loop;
end;
for迴圈
begin
for k in 1..10 loop
dbms_output.put_line(k);
end loop;
for k in reverse 1..10 loop (逆序的迴圈)
dbms_output.put_line(k);
end loop;
end;
--錯誤處理(類似於java中的異常,每個異常都有其對應的名字)
declare
v_temp number(4);
begin
select empno into v_temp from emp where empno = 10;
exception
when too_many_rows then
dbms_output.put_line('太多紀錄了');
when others then
dbms_output.put_line('error');
end;
----------
declare
v_temp number(4);
begin
select empno into v_temp from emp where empno = 2222;
exception
when no_data_found then
dbms_output.put_line('沒有資料');
end;
--建立事件日誌表
create table errorlog
(
id number primary key,
errcode number,
errmsg varchar2(1024),
errdate date
)
--建立序列
create sequence seq_errorlog_id start with 1 increment by 1
--實驗
declare
v_deptno dept.deptno%type := 10;
v_errcode number;
v_errmsg varchar2(1024);
begin
delete from dept where deptno = v_deptno;
commit;
exception
when others then
rollback;
v_errcode := SQLCODE;
//sqlcode關鍵字,出錯的程式碼
v_errmsg := SQLERRM; //sqlerrm關鍵字,出錯的資訊
insert into errorlog values (seq_errorlog_id.nextval, v_errcode, v_errmsg, sysdate);
commit;
end;
3、表示式
操作符 說明
+、- 正、負
+、-、*、/、** 加、減、乘、除、求冪
|| 字串連線
=、!=、>、>=、<、<= 邏輯比較
IS [NOT] NULL 判斷是否為NULL
[NOT] LIKE、[NOT] BETWEEN...AND... 、[NOT] IN 判斷
NOT、AND、OR 邏輯非、邏輯與、邏輯或
例項可參考:
http://www.cnblogs.com/xlhblogs/p/3507185.html
http://www.cnblogs.com/younggun/articles/1719937.html
比較全面的博文:點選開啟連結
相關文章
- oracle之PLSql語言(一)OracleSQL
- Oracle之sql語句優化OracleSQL優化
- ORACLE PLSQL語言參考OracleSQL
- oracle的sql語句OracleSQL
- Oracle 的PL/SQL語言使用OracleSQL
- oracle sql語句OracleSQL
- Oracle儲存過程乾貨(二):PLSQL控制語句Oracle儲存過程SQL
- PLSQL Language Referenc-PL/SQL控制語句-迴圈語句-基本迴圈(EXIT語句)SQL
- PLSQL Language Reference-PL/SQL語言基礎-變數賦值-使用賦值語句賦值SQL變數賦值
- Oracle SQL語句優化之UNIONOracleSQL優化
- PLSQL Language Referenc-PL/SQL控制語句-順序控制語句-NULLSQLNull
- PLSQL Language Referenc-PL/SQL控制語句-迴圈語句-FOR迴圈SQL
- PLSQL Language Referenc-PL/SQL控制語句-迴圈語句-CONTINUESQL
- PLSQL Language Referenc-PL/SQL控制語句-迴圈語句-EXIT WHENSQL
- SQL語言基礎(SELECT語句)SQL
- Oracle基本SQL語句OracleSQL
- oracle常用SQL語句OracleSQL
- PLSQL Language Referenc-PL/SQL控制語句-迴圈語句-WHILE迴圈SQLWhile
- PLSQL Language Referenc-PL/SQL控制語句-迴圈語句-CONTINUE WHENSQL
- PLSQL Language Referenc-PL/SQL控制語句-條件選擇語句-IF THEN ELSeIFSQL
- PLSQL Language Referenc-PL/SQL控制語句-條件選擇語句-IF THEN ELSESQL
- PLSQL Language Referenc-4PL/SQL控制語句-條件選擇語句-IF THENSQL
- sql 中的with 語句使用SQL
- Oracle sql with 語句語法與例子OracleSQL
- PLSQL程式語言SQL
- ORACLE很重要的sql語句OracleSQL
- [Oracle]高效的SQL語句之分析函式(一)(二)OracleSQL函式
- 【SQL】Oracle SQL join on語句and和where使用區別SQLOracle
- SQL查詢語句 (Oracle)SQLOracle
- Oracle SQL語句分類OracleSQL
- Oracle執行語句跟蹤 使用sql trace實現語句追蹤OracleSQL
- oracle 儲存過程以及plsql語句塊Oracle儲存過程SQL
- PLSQL Language Referenc-PL/SQL控制語句-迴圈語句-FOR迴圈-下限和上限SQL
- PLSQL Language Referenc-PL/SQL控制語句-條件選擇語句-搜尋CASESQL
- PLSQL Language Referenc-PL/SQL控制語句-條件選擇語句-簡單CASESQL
- Oracle SQL語言(轉)OracleSQL
- PLSQL學習——控制語句SQL
- PLSQL Language Referenc-PL/SQL控制語句-迴圈語句-FOR迴圈-FOR迴圈中的索引SQL索引