1. 程式人生 > >PLSql -- 遞迴查詢的另幾種實現方式(函式/儲存過程)

PLSql -- 遞迴查詢的另幾種實現方式(函式/儲存過程)

問題

這是一個樹結構,查詢教師“胡明星”的所有主管及姓名:(無主管的教師也需要顯示),顯示(教師編號、教師名稱、主管編號、主管名稱)

解決1

 declare
  v_tno hand_teacher.teacher_no%type;
  v_mno hand_teacher.teacher_no%type;
begin
  select teacher_no
    into v_tno
    from hand_teacher
   where hand_teacher.teacher_name = '胡明星';

  -- produce
  dbms_output.put_line('------ procedure ----');
dbms_output.put_line('Start with ' || v_tno); search_manager(v_tno); --function dbms_output.put_line('------ function -----'); dbms_output.put_line('Start with ' || v_tno); while v_tno <> '0' loop v_mno := v_tno; v_tno := search_manager_F(v_tno); end loop; exception when
no_data_found then dbms_output.put_line('1111--no_data_found'); when others then dbms_output.put_line(SQLCODE); dbms_output.put_line(SQLERRM); end;
 -- function
create or replace function search_manager_F(t_no in hand_teacher.manager_no%type)
  return hand_teacher.manager_no%type is
Result_value hand_teacher.manager_no%type; begin select nvl(manager_no, '0') into Result_value from hand_teacher where teacher_no = t_no; if Result_value = '0' then dbms_output.put_line('END'); else dbms_output.put_line(t_no || ' reports to ' || Result_value); end if; return(Result_value); exception when no_data_found then dbms_output.put_line('2222--no_data_found'); when others then dbms_output.put_line(SQLCODE); dbms_output.put_line(SQLERRM); end search_manager_F;
--procedure
create or replace procedure search_manager(t_no in hand_teacher.teacher_no%type default 't003') is
  m_no hand_teacher.manager_no%type;
begin

  select nvl(manager_no, '0')
    into m_no
    from hand_teacher
   where teacher_no = t_no;

  if m_no = '0' then
    dbms_output.put_line('END');
  else
    dbms_output.put_line(t_no || ' reports to ' || m_no);
    search_manager(m_no);
  end if;

exception
  when no_data_found then
    dbms_output.put_line('2222--no_data_found');
  when others then
    dbms_output.put_line('2222--others');
end search_manager;

結果1

這裡寫圖片描述

解決2

相關推薦

PLSql -- 查詢實現方式函式/儲存過程

問題 這是一個樹結構,查詢教師“胡明星”的所有主管及姓名:(無主管的教師也需要顯示),顯示(教師編號、教師名稱、主管編號、主管名稱) 解決1 declare v_tno hand_t

Unity中UGUI人物血條跟隨的實現方式

昨天在群裡有人在做遊戲的時候遇到了一個坑,就是用UGUI做人物血條跟隨遇到了大坑,今天就來說說如何用UGUI來做人物血條跟隨。 第一種: 把Canvas畫布作為Player的子物體。 首先:佈置一下場

二分查詢的兩實現方式JAVA

二分查詢又稱折半查詢,優點是比較次數少,查詢速度快,平均效能好;其缺點是要求待查表為有序表,且插入刪除困難。因此,折半查詢方法適用於不經常變動而查詢頻繁的有序列表。首先,假設表中元素是按升序排列,將表中間位置記錄的關鍵字與查詢關鍵字比較,如果兩者相等,則查詢成功

iconfont字型圖示使用方式阿里圖示庫

先說一下優點: 1/圖示向量化,不用擔心失真問題 2/本質上是字型,可以用css控制圖示大小/顏色/陰影等 3/圖示豐富,也可上傳 [iconfont網站地址](http://www.iconfont.cn/) 註冊這裡就不說了,網上有很多資料講

資料庫連線的兩實現方式讀取配置檔案——DBCP&C3P0;DBCP實現連線程式碼,C3P0實現連線程式碼——包含完整程式碼

兩種資料庫連線實現方式 第一種方式:DBCP DBCP使用流程 導jar包使用DBCP建立資料庫連線物件 DataSource ds=BasicDataSourceFactory.createDatasource("一個儲存連線資訊的properties集合");使

動態代理及其兩實現方式JDK、CGLIB

什麼是代理模式 為某物件提供一個代理,從而通過代理來訪問這個物件。 代理模式的角色組成 代理模式有三種角色組成: 抽象角色:通過介面或抽象類宣告真實角色實現的業務方法。 代理角色:實現抽象角色,是真實角色的代理,通過真實角色的業務邏輯方法來實現抽象

帶輸入查詢功能匹配下拉框的實現方式

sae idt hwnd 就會 bfd bmgr 使用方法 oaf adt 在Web開發中我們經常需要用戶進行輸入操作,輸入框內我們輸入幾個字,輸入框就會出現下拉提示你可能要輸入的完整信息。下面我總結了幾種常見的方案: 一:EasyUi combobox 組合框 具體使用方

斐波那契數列的三實現方式、迴圈、矩陣

《劍指offer》裡講到了一種斐波那契數列的 O(logN) 時間複雜度的實現,覺得挺有意思的,三種方法都記錄一下。 一、遞迴     一般來說遞迴實現的程式碼都要比迴圈要簡潔,但是效率不高,比如遞迴計算斐波那契數列第n個元素。 long long Fibonacci

python 全排列 中的兩實現

我所知道的全排列有四種: 1.迭代的排列組合全排列(非遞迴):字典序的大小,即傳說中的A33 2.鄰位置對換的全排列(非遞迴): 方法一:生成下一個排列,該方法對重複元素同樣有效 如果可以根據一個排列生成他的下一個排列,那麼生成所有排列也就不在話下了,下面以排列625431

單例模式的實現方式

str 類加載 代碼 創建對象 stat 懶漢 導致 方法 不支持 1、懶漢式,線程不安全 是否 Lazy 初始化:是 是否多線程安全:否 實現難度:易 描述:這種方式是最基本的實現方式,這種實現最大的問題就是不支持多線程。因為沒有加鎖 synchronized,所以嚴格意

分布式session的實現方式

服務器 單點 redis 容易 穩定性 常用 str 廣播 cati 1.基於數據庫的session共享 2.基於NFS共享文件系統 3.基於memcached 的session,怎麽保證session的高可用 4.基於resin/tomcat web容器本身的sessio

單例模式實現方式

size ron jdk null singleton bsp 還要 一個 fin 1、餓漢式:靜態常量 特點:單例的實例被聲明成static和final變量了,在第一次加載類到內存中時就會初始化,所以會創建實例本身是線程安全的 public class Sin

Java單例模式實現方式

開始 名稱 常量 就是 多線程開發 靜態代碼塊 浪費 ack 多線程同步 在平時的工作、學員的學習以及面試過程中,單例模式作為一種常用的設計模式,會經常被面試官問到,甚至筆試會要求學員現場默寫,下面將會就單例模式的實現思路和幾種常見的實現方式進行簡單的分享。

分布式鎖的實現方式

article nod process 過程 快速 details 一段時間 detail 領域 一、為什麽要使用分布式鎖 為了保證一個方法或屬性在高並發情況下的同一時間只能被同一個線程執行,在傳統單體應用單機部署的情況下,可以使用Java並發處理相關的API(如Reent

Java 定時任務的實現方式

java作業調度 tails 監聽器 ever 觸發 posit exist ttr 輕量級 JAVA實現定時任務的幾種方式 @(JAVA)[spring|quartz|定時器]   近期項目開發中需要動態的添加定時任務,比如在某個活動結束時,自動生成獲獎名單,導出exce

【小家java】Session和Cookie的區別和聯絡、分散式session的實現方式

相關閱讀 【小家java】java5新特性(簡述十大新特性) 重要一躍 【小家java】java6新特性(簡述十大新特性) 雞肋升級 【小家java】java7新特性(簡述八大新特性) 不溫不火 【小家java】java8新特性(簡述十大新特性) 飽受讚譽 【小家java】java9

最近在研究多線程,淺談JAVA中多線程的實現方式

進行 數據 使用 導致 效率問題 多線程 方法 sta img 多線程的實現方式:   個人認為,要說多線程的實現方式,萬變不離其宗,最基本的就是兩種1.繼承Thread類;2.實現runnable接口,本質上來說就是用來啟動線程執行任務的過程,具體來說的話,通過這

垂直水平居中的實現方式

一.使用彈性盒模型 display: flex      1. 在你不知道當前元素的寬高的情況下 你可以為父元素設定 display: flex;樣式 並設定 align-items: center; justify-content: center  

字串反轉的實現方式?陣列反轉

1. strrev(); 只對英文友好 2. function getRev($str,$encoding='utf-8'){ $result = ''; $len = mb_strlen($str); for($i=$len-1; $i>=0; $

Python的實現方式

Python自身作為一門程式語言,它有多種實現。這裡的實現指的是符合Python語言規範的Python解釋程式以及標準庫等。這些實現雖然實現的是同一種語言,但是彼此之間,特別是與CPython之間還是有些差別的。 下面分別列出幾個主要的實現。 1.CPython:這是Python