1. 程式人生 > >資料庫函式和儲存過程例子

資料庫函式和儲存過程例子

create or replace procedure ADD_CYBH(ghbh IN VARCHAR2,num IN INTEGER,flag OUT INTEGER) AS
   --增加取樣編號介面(CZY目錄下AddCybh.mxml) 輸入:ghbh過衡編號,num需要產生的取樣編號數目;輸出flag 1/0
i INTEGER;
ls_lj CHAR(2);
ls_qybh VARCHAR2(11);
ls_fxbh VARCHAR2(11);

w_ghbh CHAR(11);
ls_ghbh CHAR(11);
ls_gmdw VARCHAR2(30);
ls_gmkb VARCHAR2(30);
ls_cs INTEGER;
ls_fz VARCHAR2(30);
ls_lmrq DATE;
ls_ycybh VARCHAR2(11);
BEGIN
  i:=num;
  IF i=0 THEN--產生0個編號直接返回1
       BEGIN
          flag:=1;
        END;
    END IF;
  while i>0 LOOP
    BEGIN
      i:=i-1;
      --ghbh=20080314150
      
      --得到取樣編號
      ls_qybh:=get_code(ghbh,3);
      --bmjmjb編碼加密級別,LJ=2或3,得到分析編號
      select LJ into ls_lj from hc_wjljsz where LX='bmjmjb';  
      if ls_lj='2' or ls_lj='3' then
        BEGIN
          IF ls_lj='2' THEN
            BEGIN
              ls_fxbh:=ls_qybh;
            END;
          END IF;
          IF ls_lj='3' THEN
            BEGIN
              ls_fxbh:=get_code(ghbh,3);
            END;
          END IF;
        END;
      end if;
      --從HC_GHJLD_T獲取插入HC_QYJL時需要的部分資料
      w_ghbh:=ghbh;--必須
      select GHBH into ls_ghbh from HC_GHJLD_T where GHBH=w_ghbh;
      select GMDW into ls_gmdw from HC_GHJLD_T where GHBH=w_ghbh;
      select GMKB into ls_gmkb from HC_GHJLD_T where GHBH=w_ghbh;
      select CS   into ls_cs from HC_GHJLD_T where GHBH=w_ghbh;
      select FZ   into ls_fz from HC_GHJLD_T where GHBH=w_ghbh;
      select DCRQ into ls_lmrq from HC_GHJLD_T where GHBH=w_ghbh;
      select GHBH1 into ls_ycybh  from HC_GHJLD_T where GHBH=w_ghbh;
      --插入到HC_QYJL
      insert into HC_QYJL (GHBH,GMDW,GMKB,CS,FZ,LMRQ,YCYBH,QYBH,FXBH,QYRQ) values(ls_ghbh,ls_gmdw,ls_gmkb,ls_cs,ls_fz,ls_lmrq,ls_ycybh,ls_qybh,ls_fxbh,to_date('1990-01-01','YYYY-MM-DD'));--
      if sqlcode=0 then
        flag:=1;
        commit;
       else
        rollback;
        flag:=0;
      end if;
    END;
  end LOOP;
END;
create or replace function get_code(ghbh IN VARCHAR2,jmws

IN integer)
   return VARCHAR2
AS
  v_ghbh1 VARCHAR2(11);
  i integer(3);
  k integer(3);
  m VARCHAR2(11);
BEGIN

if jmws = 0  then    --如果加密位數為0 表示不加密
    return ghbh;
end if;

--根據加密的位數生成隨機加密碼
i:=1;
while i=1 loop

    v_ghbh1 := substr(ghbh,1,11 - jmws);

  select dbms_random.string('u',jmws) into m from dual;
  v_ghbh1 := v_ghbh1||m;

    --確定生成的編號是否可以使用

    k:=0;
    select count(*) into k from hc_ghjld where

ghbh1=v_ghbh1 or ghbh2=v_ghbh1;
    if k>=1 then
     i := 1;
  else
     i:=0;
  end if;

    k:=0;
    select count(*) into k from hc_ghjld_t where

ghbh1=v_ghbh1 or ghbh2=v_ghbh1;
    if k>=1 then
     i := 1;
  else
     i:=0;
  end if;

    k:=0;
    select count(*) into k from HC_QYCHD where

qybh=v_ghbh1;
    if k>=1 then
     i := 1;
  else
     i:=0;
  end if;
end loop;

  return v_ghbh1;
END;


相關推薦

資料庫函式儲存過程例子

create or replace procedure ADD_CYBH(ghbh IN VARCHAR2,num IN INTEGER,flag OUT INTEGER) AS --增加取樣編號介面(CZY目錄下AddCybh.mxml) 輸入:ghbh過衡編號,n

資料庫系統學習筆記--函式儲存過程

目錄   函式 自定義函式 基本語法 控制語句 儲存過程 自定義函式和儲存過程的區別 函式 函式的意義就在於完成特定的功能,寫一份函式,可以在多個語句中多次使用,簡化程式設計工作。 資料庫系統中的函式大致也可以分為內建函式和自定義函式(UDF

資料庫函式儲存過程的區別總結

資料庫的使用中,經常用到函式和儲存過程。都是為了實現某個sql功能,那麼這兩者有區別嗎?都適用哪些場景?總結如下 總的來說函式限制比較多,如不能用臨時表,只能用表變數等,而儲存過程的限制相對就比較少。 1.儲存過程實現的功能要複雜一點,而函式的實現的功能針對性比

學會使用MySQL中自定義函式儲存過程

一、快速瞭解什麼是儲存過程和函式?   儲存過程和函式是事先經過編譯並存儲在資料庫中的一段 SQL 語句的集合,呼叫儲存過程 和函式可以簡化應用開發人員的很多工作,減少資料在資料庫和應用伺服器之間的傳輸,對 於提高資料處理的效率是有好處的。   在對儲存過程或函式進行操作時,需要

MySQL自定義函式儲存過程的區別:

  自定義函式和儲存過程的區別: 1)一般來說,儲存過程實現的功能要複雜一點,而函式的實現的功能針對性比較強。儲存過程,功能強大,可以執行包括修改表等一系列資料庫操作;使用者定義函式不能用於執行一組修改全域性資料庫狀態的操作。 2)對於儲存過程來說可以返回引數,如記錄集,而函式只能返回值或者表物件。函式只能

Oracle 函式儲存過程的區別聯絡 總結版

  oracle儲存過程與函式的區別 2017年08月15日 22:49:38 冷月葬花魂iiii 閱讀數:7800更多 個人分類: oracle 定義: 儲存過程(Stored Procedure )是一組為了完成特定功能的SQL 語句集

mysql無法匯入函式儲存過程解決方法

mysql 建立函式時出現 Error Code : 1418 錯誤解決辦法2008-08-19 17:08Error Code : 1418 This function has none of DETERMINISTIC, NO SQL, or READS SQL

PLSQL匯出函式儲存過程

 set echo off set heading off set feedback off  spool d:\proc.sql select text from dba_source where owner='IOM_DF' and type='PROCEDURE'; spool off 1.注意ow

mysql 中函式儲存過程的區別聯絡

怎麼查詢,怎樣寫sql在sql 語句中判斷不能用 == ,要用  =  就行了 ,賦值 用 := 函式  和 儲存過程的相同點 和不同點:函式的建立:函式只能在指定資料庫中用。 和儲存方法一樣delimiter $$create function 函式名稱(引數列表) ret

mysql函式儲存過程

mysql儲存過程是幹嘛的?函式又是幹嘛的? 忽然想解釋著兩個問題也有點頭大。不過想想也簡單。 剩下的事白話胡扯的,聽聽就行了不要當著,如果有什麼不合適的,或者是誤人子弟的請留言評論。馬上更正 首先我們說儲存過程是幹嘛的,為嘛要用儲存過程 如果沒學過程式語言java或C++

ORACLE建立包包體及包中函式儲存過程

背景:在Oracle資料庫建立包,在包建立函式Function和儲存過程Procedure。在java專案中呼叫。 建立包,並在下面宣告包含的函式和儲存過程: create or replace p

JAVA通過呼叫資料庫函式呼叫儲存過程

package com.ljq.test; import java.sql.CallableStatement; import java.sql.Connection; import java.sql.SQLException; import java.sql.Types; publicclass Pro

函式儲存過程的區別

今天中午扯淡的時候,同事扯到了 Function 和 Stored Procedure 的區別。後來我又度娘了一把,發現那些個答案有些坑爹,故此Mark一把。 1. Function 執行完成之後一定會結果返回,而且僅有一個返回值;Stored Procedure 既

JDBC-MYSQL-儲存函式儲存過程的呼叫

最近要學習資料庫,在用JDBC呼叫儲存過程和儲存函式是出現了小麻煩。在MYSQL中,用JDBC呼叫儲存過程和儲存函式還是有一些不同的。  一,用JDBC呼叫儲存過程一般過程如下: String sql = "call proc(?,?)"; CallableSt

sqlserver 自定義、刪除、執行 函式儲存過程

自定義儲存過程: if (object_id('p_wm_get_dynstore', 'P') is not null) drop proc p_wm_get_dynstore go create procedure p_wm_get_dynstore( @s

MySQL利用自定義函式儲存過程建立海量表,並使用索引優化

昨天學習韓順平老師的視訊時明白了上一章explain的意義,為了自己的聯絡,我學著建立了一個海量表,供自己練習使用。 程式碼如下: #建立表DEPT CREATE TABLE dept( /*部門表*/ deptno MEDIUMINT UN

sql(join中on與where區別) / NVL函式 / oracle儲存過程中isas區別 / JAVA呼叫資料庫儲存過程

left join :左連線,返回左表中所有的記錄以及右表中連線欄位相等的記錄。 right join :右連線,返回右表中所有的記錄以及左表中連線欄位相等的記錄。 inner join: 內連線,又叫等值連線,只返回兩個表中連線欄位相等的行。 full join:外連線,返回兩個表中的行:left jo

00201 資料庫基礎:函式、觸發器TRIGGER儲存過程PROCEDURE

/本博文語法基於SQL SERVER 2008 自建函式FUNCTION 使用者自己寫的一些SQL程式碼的組合,從而實現特定的功能 建立函式的語法: CREATE FUNCTION function_name (arg1 type1, a

惠州學院-資料庫實驗6-觸發器儲存過程

    計算機科學系實驗報告(首頁) 課程名稱 資料庫系統概論 班級 14計科2班 實驗名稱 觸發器和儲存過程

mysql資料庫--mysql函式儲存過程

函式 函式:將一段程式碼封裝到一個結構中,在需要執行程式碼塊的時候,呼叫結構執行即可(程式碼複用) 函式分為兩類:系統函式和自定義函式 系統函式: 系統定義好的函式,直接呼叫即可。任何函式都有返回值,因此函式的呼叫是通過select呼叫。 mysql中字串基本操作單位(最常見的