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控制語句Oracle儲存過程SQL
- Oracle 的PL/SQL語言使用OracleSQL
- Oracle基本SQL語句OracleSQL
- SQL語言基礎(SELECT語句)SQL
- SQL查詢語句 (Oracle)SQLOracle
- 【SQL】Oracle SQL join on語句and和where使用區別SQLOracle
- PLSQL程式語言SQL
- Oracle SQL精妙SQL語句講解OracleSQL
- Oracle執行語句跟蹤 使用sql trace實現語句追蹤OracleSQL
- 列出oracle dbtime得sql語句OracleSQL
- 查詢Oracle正在執行的sql語句及執行該語句的使用者OracleSQL
- 後臺執行SQL語句(oracle)SQLOracle
- 使用sql語句查詢平均值,使用sql語句查詢資料總條數, not in 篩選語句的使用SQL
- Oracle儲存過程乾貨(三):PLSQL迴圈語句Oracle儲存過程SQL
- Oracle OCP(01):使用SQL SELECT語句檢索資料OracleSQL
- oracle v$sqlare 分析SQL語句使用資源情況OracleSQL
- Java中如何解析SQL語句、格式化SQL語句、生成SQL語句?JavaSQL
- MySQL之SQL語句優化MySql優化
- SQL語句SQL
- java連線oracle執行sql語句JavaOracleSQL
- 關於使用plsql操作oracle的一點小技巧和幾個常用的查詢語句SQLOracle
- SQL語句IN的用法SQL
- 18 與Oracle Data Guard 相關的SQL語句OracleSQL
- flask之控制語句 if 語句與for語句Flask
- 20180417PLSQL中sql語句格式化與註解問題SQL
- Oracle中如何查詢未使用繫結變數的SQL語句?Oracle變數SQL
- MySQL指南之SQL語句基礎MySql
- 【轉】LINQ to SQL語句(1)之WhereSQL
- 關於使用plsql操作oracle的一點小技巧和幾個常用的查詢語句BUSQLOracle
- SQL SELECT 語句SQL
- sql常用語句SQL
- ORACLE常用語句:Oracle
- ORACLE中sql語句----運算子的優先順序OracleSQL
- jsqlparser使用記錄---生成sql語句JSSQL
- Fastapi sqlalchemy DBApi 直接使用sql語句ASTAPISQL
- 【SQL】9 SQL INSERT INTO 語句SQL
- 【SQL】10 SQL UPDATE 語句SQL
- 【SQL】11 SQL DELETE 語句SQLdelete
- SQL語言SQL