1. 程式人生 > >plsql返回記錄集的方法利用table()函式—之二

plsql返回記錄集的方法利用table()函式—之二

今天在開發的時候,要找出兩個表中的不同記錄。我一般是用exists的,但看到也可以這樣

SELECT T5,T6,T7,T8 FROM TAB02 WHERE
     T5||T6||T7 NOT IN
     (SELECT T1||T2||T3 FROM TAB01)

把幾個欄位合併成一個欄位,雖然很SB,但可以解決問題。

下面是重點,集合物件,以前我都是用遊標來出來記錄集,但有了集合物件後就可以直接載入記錄集了,下面是一個使用集合物件record,table的例子

DECLARE
      TYPE TEST_EMP IS RECORD
      (
       C1 AA.PI%TYPE,
       C2 AA.PO%TYPE
      );
     
      type t_type is table of TEST_EMP;    ---type t_type is table of aa%rowtype;
      v_type t_type;

BEGIN
     SELECT PI,PO BULK COLLECT INTO v_type
     FROM AA
     WHERE AA.PI <= 3;
     for v_index in 1 .. v_type.count() loop
         dbms_output.put_line(v_type(v_index).C1 || ' ' || v_type(v_index).C2);      
     end loop;
END;

下面我要解決怎樣用過程返回一個集合。


PL/SQL表---table()函式用法:
利用table()函式,我們可以將PL/SQL返回的結果集代替table。

simple example:

1、table()結合陣列:

create or replace type t_test as object(
id integer,
rq date,
mc varchar2(60)
);

create or replace type t_test_table as table of t_test;

create or replace function f_test_array(n in number default null) return t_test_table
as
v_test t_test_table := t_test_table();
begin
for i in 1 .. nvl(n,100) loop
v_test.extend();
v_test(v_test.count) := t_test(i,sysdate,'mc'||i);
end loop;
return v_test;
end f_test_array;


select * from table(f_test_array(10));

/*

2、table()結合PIPELINED函式:

*/

create or replace function f_test_pipe(n in number default null) return t_test_table PIPELINED
as
v_test t_test_table := t_test_table();
begin
for i in 1 .. nvl(n,100) loop
pipe row(t_test(i,sysdate,'mc'||i));
end loop;
return;
end f_test_pipe;
/

select * from table(f_test_pipe(20));

/*

3、table()結合系統包:

*/

create table test (id varchar2(20));
insert into test values('1');
commit;
explain plan for select * from test;
select * from table(dbms_xplan.display);

相關推薦

plsql返回記錄方法利用table函式

今天在開發的時候,要找出兩個表中的不同記錄。我一般是用exists的,但看到也可以這樣 SELECT T5,T6,T7,T8 FROM TAB02 WHERE      T5||T6||T7 NOT IN      (SELECT T1||T2||T3 FROM TAB01)

【轉載】plsql返回記錄方法利用table函式

今天在開發的時候,要找出兩個表中的不同記錄。我一般是用exists的,但看到也可以這樣SELECT T5,T6,T7,T8 FROM TAB02 WHERE      T5||T6||T7 NOT IN      (SELECT T1||T2||T3 FROM TAB01)把幾個欄位合併成一個欄位,雖然很SB

父程序利用fork函式建立子程序並且利用shared_memory進行通訊的例項

#include<stdio.h> #include<unistd.h> #include<sys/shm.h> #include<sys/stat.h>

存儲過程不返回記錄導致ADO程序出錯

sad () cad csdn博客 dset cts ref seo open HRESULT _hr = get_adoEOF(&_result); IsEOF()函數如下:其中ADOCG::_RecordsetPtr m_pRecordset; BOOL I

Postgres自定義函式返回記錄(虛擬表結構)

CREATE OR REPLACE FUNCTION fun_get_real_inv_qty(pvOrderId varchar) RETURNS SETOF record AS $BODY$b

oracle pipelined返回函式 針對資料彙總統計 返回結果方法

/*開啟日誌輸出*/ Set serveroutput on ; /*建立型別*/ create or replace type type_flux_data_stat_o as object ( ifinoctetsbps number , ifoutoctetsbps number

plsql 返回結果的儲存過程

 --返回結果集的儲存過程  --1.建立一個包,在該包中定義了一個遊標型別test_corsor create or replace package testpackage as  type test_cursor is ref cursor; end testpacka

C語言創建符號常量的三種方法;printf和scanf()函數

c1、#indefine pi 3.1415926形式的宏定義2、const int MONTHS=12;這使得MONTHS成為一個只讀值。3、enum 枚舉類型4、printf()和scanf()函數使我們能夠與程序通信,他們被稱為輸入/輸出函數,(I/O函數)5、字符串、浮點數輸出的類型及介紹:實例程序:

createTextNode() 方法和createTextNode方法

script 屬性 tno tle html creat uno 按鈕 文本節點 <!DOCTYPE html><html><head><meta charset="utf-8"><title>菜鳥教程(runoo

c++作業實驗10第4章課後習題11遞歸用遞歸方法求f

ace 循環 中間變量 urn 裏的 調用 為什麽 區塊 不知道 // 實驗10第4章課後習題11遞歸.cpp: 定義控制臺應用程序的入口點。 #include "stdafx.h" using namespace std; #include<iostream>

什麼是方法以及evall和isnan和numberstring的使用

js在執行前,瀏覽器會給它一個環境,叫window全域性作用域 alert() prompt() confirm()都是方法 怎麼趙這個方法和屬性歸屬?     1、arr。find()  find()是arr的     2、沒有帶.  在誰的環境下是誰的 判別變數的資料型別ty

JQuery繫結事件bind方法和on方法的優缺點

jQuery繫結事件的方法有四種:bing()、live()、delegate()、on(),其中live(),已經被淘汰了,其存在很多的問題,不適合使用,而delegate能夠在繫結事件後,依然可以新增動態元素事件。on()可以說是前三種方法的結合體。 1.bind()方法: b

事件繫結中的call方法和apply方法

今天對於call方法和apply方法有些懵,所以去看了些別人的總結,感覺有了點概念,把一些大佬寫的東西中自己感覺易懂的解釋和經典的案例記錄一下。 定義 call方法: 語法:call([thisObj[,arg1[, arg2[, [,.argN]]]]]) 定義:呼叫一個物件的一個

Map集合中value方法與keySet、entrySet()區別

Map<String,String> map = new HashMap<String,String>();map.put(“01”, “zhangsan”);map.put(“02”, “lisi”);map.put(“03”, “wangwu”);Collection<St

UnityEditor下檔案操作方法彙總Unity3D開發十四

最近經常需要些一個編譯工作指令碼,經常操作一個檔案。下面是一個彙總了的檔案操作方法。 using UnityEngine; #if UNITY_EDITOR using UnityEditor; using System; using System.IO

建立一個數組, 實現函式init初始化陣列, 實現empty清空陣列、,實現reverse函式完成陣列元素的逆置。自己設計函式的引數,返回值。

#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> void init(int arr[], int len) { for (int i = 0; i < len; ++i)

jQuery新增-append方法和after方法的區別

jquery的append()方法可以在被選中元素的結尾插入內容。這個意思是在該元素上做文章。 ex: $("p").append("hello,csdn"); after()方法可以在被選中的元素的下方插入內容,該內容重新起一行, 與被選擇的元素並沒有什麼邏輯上的聯

利用Tensorflow進行自然語言處理NLP系列高階Word2Vec

一、概述 在上一篇中,我們介紹了Word2Vec即詞向量,對於Word Embeddings即詞嵌入有了些基礎,同時也闡述了Word2Vec演算法的兩個常見模型 :Skip-Gram模型和CBOW模型,本篇會對兩種演算法做出比較分析並給出其擴充套件模型-GloVe模型。

android中EditText文字監聽的方法:addTextChangedListener

      最近遇到這樣一個問題,想把一個activity文字框中輸入的內容,在跳到另外一個activity時,這個文字框裡的值仍不變。我通過bundle進行了傳遞,但是就是傳不過去。在網上查了資料,原來是沒有用addTextChangedListener()這個方法進行監聽

PCL學習筆記——利用點雲配準CorrespondenceEstimationBase函式找出兩部分點雲重疊區域

主要Classes: pcl::registration::CorrespondenceEstimation< PointSource, PointTarget, Scalar > Class Template Reference 主要函式: tem