Oracle表值函式的兩種寫法
-- 建立表 DECLARE CNT INTEGER; BEGIN SELECT COUNT(0) INTO CNT FROM USER_ALL_TABLES WHERE TABLE_NAME = 'CMSTEMP'; IF CNT = 0 THEN EXECUTE IMMEDIATE ' CREATE TABLE CMSTEMP( ID INTEGER PRIMARY KEY, NAME VARCHAR2(32), AGE INTEGER, ADDRESS VARCHAR2(64) )'; END IF; END; -- 建立 type DECLARE CNT INTEGER; BEGIN SELECT COUNT(0) INTO CNT FROM USER_TYPES WHERE TYPE_NAME = 'CMSTEMPTYPE'; IF CNT = 0 THEN EXECUTE IMMEDIATE 'CREATE OR REPLACE TYPE CMSTEMPTYPE AS OBJECT ( ID INTEGER, NAME VARCHAR2(32), AGE INTEGER, ADDRESS VARCHAR2(64) )'; END IF; END; -- 建立type 表 DECLARE CNT INTEGER; BEGIN SELECT COUNT(0) INTO CNT FROM USER_TYPES WHERE TYPE_NAME = 'CMSTEMPTYPETABLE'; IF CNT = 0 THEN EXECUTE IMMEDIATE ' CREATE OR REPLACE TYPE CMSTEMPTYPETABLE AS TABLE OF CMSTEMPTYPE ' ; END IF; END; -- 建立臨時表 DECLARE CNT INTEGER; BEGIN SELECT COUNT(0) INTO CNT FROM USER_ALL_TABLES WHERE TABLE_NAME = 'CMSTEMPGLO'; IF CNT = 0 THEN EXECUTE IMMEDIATE 'CREATE GLOBAL TEMPORARY TABLE CMSTEMPGLO( ID INTEGER PRIMARY KEY, NAME VARCHAR2(32), AGE INTEGER, ADDRESS VARCHAR2(64) ) ON COMMIT PRESERVE ROWS'; END IF; END; --建立包 CREATE OR REPLACE PACKAGE GLOBALPACKGE AS TYPE CUR1 IS REF CURSOR; END;
第一種方式使用臨時表
CREATE OR REPLACE FUNCTION NS_CMS_GETCMSTEM(NAME VARCHAR2) RETURN CMSTEMPTYPETABLE PIPELINED IS PRAGMA AUTONOMOUS_TRANSACTION; V_NAME VARCHAR2(32); V_AGE INTEGER; V_ADDRESS VARCHAR2(64); V_ID INTEGER; RWS CMSTEMPTYPE := CMSTEMPTYPE(NULL, NULL, NULL, NULL); V_CUR GLOBALPACKGE.CUR1; BEGIN EXECUTE IMMEDIATE 'TRUNCATE TABLE CMSTEMPGLO'; FOR REC IN (SELECT * FROM CMSTEMP) LOOP V_NAME := REC.NAME; V_AGE := REC.AGE; V_ID := REC.ID; V_ADDRESS := REC.ADDRESS; INSERT INTO CMSTEMPGLO (ID, ADDRESS, AGE, NAME) VALUES (V_ID, V_ADDRESS, V_AGE, V_NAME); DBMS_OUTPUT.PUT_LINE('11111111111'); END LOOP; COMMIT; OPEN V_CUR FOR SELECT * FROM CMSTEMPGLO; LOOP FETCH V_CUR INTO RWS.ID,RWS.NAME,RWS.AGE,RWS.ADDRESS; EXIT WHEN V_CUR%NOTFOUND; PIPE ROW(RWS); END LOOP; CLOSE V_CUR; END;
第二種方式不適用臨時表
CREATE OR REPLACE FUNCTION NS_CMS_GETCMSTEMP(NAME VARCHAR2) RETURN CMSTEMPTYPETABLE PIPELINED AS PRAGMA AUTONOMOUS_TRANSACTION; V_CUR GLOBALPACKGE.CUR1; V_NAME VARCHAR2(32); V_ADDRESS VARCHAR2(64); V_AGE INTEGER; V_ID INTEGER; RET_ROW CMSTEMPTYPE := CMSTEMPTYPE(NULL, NULL, NULL, NULL); RET_TABLE CMSTEMPTYPETABLE := CMSTEMPTYPETABLE(); -- 這裡必須這樣寫 BEGIN FOR REC IN (SELECT * FROM CMSTEMP) LOOP RET_TABLE.EXTEND; RET_ROW.ID := REC.ID; RET_ROW.AGE := REC.AGE; RET_ROW.NAME := REC.NAME; RET_ROW.ADDRESS := REC.ADDRESS; RET_TABLE(RET_TABLE.COUNT) := RET_ROW; END LOOP; COMMIT; open V_CUR for select * from table(RET_TABLE); loop fetch V_CUR into RET_ROW.ID,RET_ROW.NAME,RET_ROW.AGE,RET_ROW.ADDRESS; --順序要和type物件裡定義的順序保持一致 exit when V_CUR%notfound; pipe row(RET_ROW); end loop; close v_cur; END;
插入資料
<pre class="sql" name="code">declare
i integer;
begin
for i in 1 ..100 loop
insert into cmstemp values (i,'zhangsan'||i,1+i,'王府大街'||i);
commit;
end loop;
end;
查詢sql
<pre class="sql" name="code">select * from table(ns_cms_getcmstemp('')) ;
select * from table(NS_CMS_GETCMSTEM('')) ;
相關推薦
Oracle表值函式的兩種寫法
-- 建立表 DECLARE CNT INTEGER; BEGIN SELECT COUNT(0) INTO CNT FROM USER_ALL_TABLES WHERE
JavaWeb後臺從input表單獲取文本值的兩種方式
out script body throws ioe spa ava set action JavaWeb後臺從input表單獲取文本值的兩種方式 #### index.html <!DOCTYPE html> <html
Oracle修改序列當前值的兩種方式
總是忘記對序列的操作,特將此記錄下來。 1、直接drop sequence seq_t_test;然後重新建立並且設定序列的初始值為希望的資料 SQL: drop sequence seq_t_test; create sequence seq_t_test; increment by 1
【v-on】一個元素繫結多個事件以及一個事件繫結多個函式的兩種寫法
本文程式碼主要講述了v-on繫結事件函式傳參,一個元素繫結多個事件的兩種寫法,一個事件繫結多個函式的兩種寫法,修飾符的使用。 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8
vue繫結值與字串拼接兩種寫法
<cell :title="`當前門店:${item.Storename}`" link="/component/radio" :inline-desc="'門店地址:' + item.Storeaddess"></cell> 第一種 :title="`字串${xx}
關於forEach函式的兩種寫法。
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>forEach demo</title> </head>
javascript中自執行(自呼叫)函式的兩種寫法
自執行函式定義: 自執行函式或是自呼叫函式 宣告完了,馬上進行呼叫,只能使用一次,,有兩種寫法,舉個栗子如下: 寫法一: 格式:(函式)(實參) <script&g
為結構體中函式指標賦值的兩種方法
/** 02. * 為結構體中的指標陣列賦值 03. */ 04. 05.#include <stdio.h> 06. 07.typedef struct test 08.{ 09. void (*p)(void); 10.
前端from表單中action屬性值得兩種寫法
1. 直接寫後端定義好的路徑urlurlpatterns = [ url(r'^register/$',register), ]<form action='/register/' method='post'></form> 缺點:當後端給定
oracle刪除表資料的兩種的方式
平時寫sql中我們都會用到刪除語句,而平時刪除表資料的時候我們經常會用到兩種方式: 在oracle中,truncate、delete都可以刪除表資料,具體的區別以及sql語法如下: truncate table [表名]; delete from [表名]; de
【shell】獲取函式返回值的兩種方法
方法一: 使用全域性變數 g_result="" function testFunc() { g_result='local value' } testFunc echo $g_resu
【OC學習-8】存取器方法?getter和setter?事實上就是賦值和返回值的兩種函數
trac -m main 都是 protect pro 聲明 return 安全 我們在聲明類的時候,有實例變量+方法(函數),這些實例變量假設默認的話都是protected類型,一般無法直接訪問。更別提賦值和調用了,所以就產生了兩種函數,ge
HDU 2102 A計劃 DFS與BFS兩種寫法
blog ons bsp 求解 stream eof node 耗時 {} 1.題意:一位公主被困在迷宮裏,一位勇士前去營救,迷宮為兩層,規模為N*M,迷宮入口為(0,0,0),公主的位置用‘P‘標記;迷宮內,‘.‘表示空地,‘*‘表示墻,特殊的,‘#‘表示時空傳輸機,走到
前臺向後臺傳值的兩種方法 以及 從後臺獲取數據的方法
list 獲取數據 data border asc req rip attr 訂單 1、前臺向後臺傳值方法一: 表單提交的方式: 1 <form action="${path }/manage/logon.do" method="post" id="logonFo
js對象取值的兩種方式
使用 obj 括號 code spa bsp key值 兩種 var var obj = {abc:"ss",nn:90}; var v1 = obj.abc;//使用點的方式 var v2 = obj["abc"];//使用中括號的方式 在實際項目中一般使用點,會方便
不用第三方參數,交換2個參數的值的兩種宏函數
三方 logs cto ring using def names 第三方 fine #include <iostream> #include <stdio.h> #include <string.h> #include <vect
es6對象內函數的兩種寫法
images style image class cti window對象 ima nbsp 方法 es6對象內函數一般有兩種寫法: var person1 = { name: "p1", sayThis() { console.log(t
CSS中`nav ul li ul` 與 `nav>ul>li` 這兩種寫法的區別是什麽
class apach pac 順序 code nbsp ron 例如 選擇 >是指只能一代接一代,比如: nav>ul>li>ul>li,必須是下面這樣的 <nav> <
LCA的兩種寫法
blank mes col tarjan include pri for namespace continue 第一種是離線的Tarjan算法 #include<cstdio> using namespace std; int rd(){ int x=
【轉載】form表單的兩種提交方式,submit和button的用法
按鈕 type ssid login false tex .get ons 轉載 1.當輸入用戶名和密碼為空的時候,需要判斷。這時候就用到了校驗用戶名和密碼,這個需要在jsp的前端頁面寫;有兩種方法,一種是用submit提交。一種是用button提交。方法一:在jsp的前端