1. 程式人生 > >oracle儲存過程,動態sql

oracle儲存過程,動態sql

       
CREATE OR REPLACE PROCEDURE "TUBEMNG"."RE" (one OUT INTEGER,two OUT INTEGER,three OUT INTEGER,four OUT INTEGER,ptype IN VARCHAR2,DRAWNO IN VARCHAR2,MSIZE IN VARCHAR2) AS
TYPE name_num_rc IS REF CURSOR;
  cv name_num_rc;
dynal_sql VARCHAR2(500);
NUM INTEGER;
IN_TIME DATE;
BEGIN
one:= 0;
   four:= 0;
   three:=0;
   two:=0;
dynal_sql:='SELECT ST.IN_TIME,TU.NUM
                  FROM TB_DM_ML_STOCK st INNER JOIN TB_DM_TUBE tu ON ST.TU_ID=TU.TU_ID WHERE 1=1';
--dbms_output.put_line(ptype);

--機型
IF ptype IS NOT NULL THEN dynal_sql:=dynal_sql || ' AND TU.P_TYPE=''' ; dynal_sql:= dynal_sql || ptype || ''''; --dbms_output.put_line(dynal_sql); END IF; --零件圖號 IF DRAWNO IS NOT NULL THEN dynal_sql:=dynal_sql || ' AND TU.DRAW_NO=''' ; dynal_sql:= dynal_sql || DRAWNO || ''''; --dbms_output.put_line(dynal_sql); END IF; --尺寸
IF MSIZE IS NOT NULL THEN dynal_sql:=dynal_sql || ' AND TU.M_SIZE=''' ; dynal_sql:= dynal_sql || MSIZE || ''''; --dbms_output.put_line(dynal_sql); END IF; OPEN cv FOR dynal_sql; FETCH cv INTO IN_TIME,NUM; WHILE CV%FOUND LOOP --根據上一次取到的值進行操作 IF IN_TIME IS NOT NULL THEN IF ADD_MONTHS(IN_TIME, 1)> SYSDATE THEN--一個月以內的記錄
one:=one+NUM; ELSIF ADD_MONTHS(IN_TIME, 3)> SYSDATE THEN --1-3個月滯留時間 two:=two+NUM; ELSIF ADD_MONTHS(IN_TIME, 6)> SYSDATE THEN --3-6個月滯留時間 three:=three+NUM; ELSE--3-6個月滯留時間 four:=four+NUM;--半年以上滯留記錄 END IF; END IF; --再一次取值 FETCH cv INTO IN_TIME,NUM; END LOOP; --FETCH cv into NAMES; -- routine body goes here, e.g. -- DBMS_OUTPUT.PUT_LINE('Navicat for Oracle'); --INSERT INTO WX_MENU(ID,NAME) VALUES('1122623212','12123'); CLOSE cv; END;

相關推薦

oracle儲存過程,動態sql

CREATE OR REPLACE PROCEDURE "TUBEMNG"."RE" (one OUT INTEGER,two OUT INTEGER,three OUT INTEGER,four OUT INTEGER,ptype IN VARCHAR2,D

mysql 儲存過程動態sql

DROP PROCEDURE IF EXISTS PRO_STA_SYSTEM_ORDER_STATE; DELIMITER // CREATE DEFINER=`root`@`%` PROCEDURE `PRO_STA_SYSTEM_ORDER_STATE`(OUT O_RESULT_

SQL Server建立儲存過程——動態SQL

儲存過程(stored procedure)是一組為了完成特定功能的SQL語句集合,經編譯後儲存在伺服器端的資料庫中,利用儲存過程可以加速SQL語句的執行。 自定義儲存過程,由使用者建立並能完成某一特定功能的儲存過程,儲存過程既可以有引數又有返回值,但是它與函式不同,儲存過程的返回值只是指明執行是否成功,

ORACLE 儲存過程動態遊標例子

一、 CREATE OR REPLACE PROCEDURE PRC_WAP_ACTIVEUSERS(RETCODE OUT VARCHAR2) /***********************************************************

ORACLE 儲存過程動態建立檢視

create or replace procedure "CREAR_PF_VIEW" is    pragma AUTONOMOUS_TRANSACTION;    cursor cur is  --定義遊標    SELECT SPBLX FROM YDS_SHBPDY

動態sql執行oracle儲存過程

     1、呼叫procedure:          v_sql  := 'Begin pkg_name.procedure_name(:in_v1, :in_v2, :out_v1, :out_v2); End;' ;           EXECUTE IMMEDI

oracle儲存過程中應用動態sql

需求背景:對有些資料庫操作較多的功能演算法需求,或使用應用程式程式碼多次連線操作資料,會造成較大效能損耗,或者系統動態引數化如要查詢的表名是存在資料庫裡的,為節減網路連線開銷,建議使用儲存過程實現資料庫操作需求的演算法。動態sql ,意思是sql語句並不是事先明確的,而是可

Oracle 儲存過程中執行動態SQL動態表名

create or replace procedure mw_sys.clearrubbishdatefy2 is type table_type is table of mw_app.mwt_ud_yscsjdl.tablename%type; tablenameAr

oracle儲存過程中如何執行動態SQL語句

有時需要在oracle儲存過程中執行動態SQL語句 ,例如表名是動態的,或欄位是動態的,或查詢命令是動態的,可用下面的方法: set serveroutput ondeclare    n number;    sql_stmt varchar2(50);    t varc

java中呼叫Oracle儲存過程時,出現異常:java.sql.SQLException: ORA-00928: 缺失 SELECT 關鍵字(已解決)

在java中呼叫Oracle儲存過程時,出現異常:java.sql.SQLException: ORA-00928: 缺失 SELECT 關鍵字 //java程式碼 @Test public void testProcedure(){

oracle帶輸入輸出引數儲存過程(包括sql分頁功能)

記錄一下,免得以後忘記了又要到處去找。 begin /*這裡不能直接執行select語句但可以直接執行update、delete、insert語句*/ end裡面不能接執行select語句,宣告會話級臨時表必須有“execute immediate 'TRUNCATE TABLE 表名';”這一句不然其他的s

oracle儲存過程----變數的介紹及使用(PL/SQL)

oracle儲存過程—-變數的介紹及使用   學習一門語言,既然學會了hello word 的輸出,那就要關注下基礎,首先要熟悉儲存過程 中的變數型別。   關於儲存過程變數有哪些 ,這樣的問題,我在百度上搜索,卻發現很多沒用的,最近在同事那裡,忽然

ORACLE 儲存過程的建立以及ORA-06502:PL/SQL:數字或值錯誤的解決方法

建立四個儲存過程,分別是簡單不帶引數的儲存過程、帶兩個輸入引數IN的儲存過程、帶一個輸入引數IN,一個輸出引數OUT的儲存過程和帶兩個輸入輸出引數IN OUT的儲存過程。 建立一張全域性臨時emp表 CREATE GLOBAL TEMPORARY TAB

ORACLE定時任務呼叫儲存過程動態為表新增分割槽

1、建立需要自動分割槽的表 CREATE TABLE TEST(M DATA) PARTITION BY RANGE(M) ( PARTITION TEST_PAR_99991212 VALUES LESS THAN(TO_DATE('12-12-9999','DD-MM-

mysql 儲存過程動態拼接sql並執行賦值

CREATE DEFINER = CURRENT_USER PROCEDURE `NewProc`(in _xnb varchar(50)) BEGIN ## 定義變數 DECLARE _num FLOAT(14,6) DEFAULT 0; ## @表示全域性變數 相當於php

Oracle儲存過程使用動態遊標

spool F:/dbtest12.log; set timing on; set serveroutput on; declare --定義遊標:獲取所有表 CURSOR c_allTables IS select t.OWNER,t.TABLE_NAME from

Oracle儲存過程實現通過動態引數複製表

(作者:陳玓玏) 上一篇記錄的是通過自定義函式複製表的筆記,但是覺得過程還是有些麻煩。覺得還是用儲存過程更簡潔些,今天就把儲存過程的寫法整理出來了。下面程式碼用的時候記得把相應位置變數替換成你自己的。 --使用儲存過程複製表,使用儲存過程來複製表比使用自定義函式

oracle儲存過程中使用execute immediate執行sql報ora-01031許可權不足的問題

--問題描述: 使用者在儲存過程中呼叫execute immediate 執行 create table語句報錯 ORA-01031, 並且反映直接執行該語句無報錯。--原因根據問題可以發現使用者確實有create table的許可權,查詢dba_role_privs 和 d

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

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

如何在pl/sql developer 7執行到oracle儲存過程設定斷點的地方

如何高效除錯oracle儲存過程,尤其是父子網狀呼叫的儲存過程 1,在需要設定斷點的oracle儲存過程處設定斷點        如何設定斷點:直接在某行oracle儲存過程處單擊行首,會在行首顯示一個    中間以白叉填充的紅色小圓圈.  如何取消斷點:單擊中間以白叉