select into 多個值 為空
阿新 • • 發佈:2019-02-07
select into 為空和多個值:
1、異常處理法
將
select ... into ............;
的地方改寫成:
begin
select ... into ............;
exception
when no_data_found then
.......
end;
2、還有一種方法是利用遊標處理
select ... into ............;
這樣的語句。比較麻煩,主要是利用遊標可以返回%notfound的特性。
3、巧用聚合函式處理
說明:使用select...into語句時,如果查詢返回的資料不是1行,就會報no_data_found或者to_many_rows兩種異常。
案例:根據部門號,查詢部門名稱。
處理方法:巧用聚合函式處理
DECLARE
v_dname dept.dname%TYPE;
BEGIN
SELECT MAX(dept.dname) INTO v_dname
FROM dept WHERE deptno=90;
IF(v_dname IS NULL)THEN
dbms_output.put_line('此部門不存在!');
ELSE
dbms_output.put_line(v_dname);
END IF;
END;
說明:利用聚合函式一定會返回結果的特點, 避免了使用select...into語句容易丟擲異常的問題。
1、異常處理法
將
select ... into ............;
的地方改寫成:
begin
select ... into ............;
exception
when no_data_found then
.......
end;
2、還有一種方法是利用遊標處理
select ... into ............;
這樣的語句。比較麻煩,主要是利用遊標可以返回%notfound的特性。
3、巧用聚合函式處理
說明:使用select...into語句時,如果查詢返回的資料不是1行,就會報no_data_found或者to_many_rows兩種異常。
案例:根據部門號,查詢部門名稱。
處理方法:巧用聚合函式處理
DECLARE
v_dname dept.dname%TYPE;
BEGIN
SELECT MAX(dept.dname) INTO v_dname
FROM dept WHERE deptno=90;
IF(v_dname IS NULL)THEN
dbms_output.put_line('此部門不存在!');
ELSE
dbms_output.put_line(v_dname);
END IF;
END;
說明:利用聚合函式一定會返回結果的特點, 避免了使用select...into語句容易丟擲異常的問題。