通過儲存過程實現排序

2021-12-30 11:40:53 字數 2179 閱讀 7230

通過儲存過程實現排序

create or replace procedure sort_node  www.2cto.com  

(    node_xlid in varchar2)as

v_start_node varchar2(100);

v_node1 varchar2(100);

v_node2 varchar2(100);

v_count number := 0;

v_index number :=0;

type start_nodes_table is table of varchar2(100) index by binary_integer;

startnodes_set start_nodes_table;

begin

--根據線路id來查詢所有點裝置的節點資訊,找到首節點資訊,以找到的第乙個沒有前序節點且後序節點不為空的node作為首節點。

--首節點可以為多個,因為連線關係在指定的過程當中可能出現多段。

--如果遍歷完都沒有找到這樣的節點,說明還沒有對點裝置指定敷線關係,那麼就不更新排序號,按照採集的節點名稱排序。

for rec in  (select a.global_id globalid,a.par_id parid,a.sbmc name from

dp_component_common a, dp_xl_sb_re b,em_equipment c

where a.global_id = b.global_id and a.par_id is null and  a.equipment_fno=c.equipment_fno and c.is_point=1

and b.xl_global_id =node_xlid )

loop

--判斷是否為首節點,獲取到當前點裝置的global_id,依據線路裝置包含關係中前序為空,後續不為空

--同時把所有的首節點新增到用於存放首節點的表中。

select node1_id,node2_id into v_node1,v_node2 from dp_xl_sb_re where global_id = rec.globalid and xl_global_id = node_xlid;

if(v_node1 is null and v_node2 is not null) then

v_index :=v_index+1;

--v_start_node := rec.globalid;

startnodes_set(v_index):=rec.globalid;

--exit;

end if;

end loop;

--如果集合長度不為空,那麼就說明存在首節點,遍歷集合中的首節點,對從首節點開始的每個點裝置進行遍歷,

--對每一段進行排序,對排序號賦值排序

--if(v_start_node is not null and length(trim(v_start_node))!=0)then

if(startnodes_set.count!=0)then

--首先把線路下面的排序號都置為空

update dp_xl_sb_re set sortno = null where xl_global_id = node_xlid;

--迭代首節點,獲取到首節點

for i in 1..startnodes_set.count  loop

v_start_node := startnodes_set(i);

--重新編號

for rec in (select global_id,node1_id from dp_xl_sb_re where xl_global_id = node_xlid

start with global_id = v_start_node and xl_global_id = node_xlid

connect by prior global_id = node1_id )

loop

v_count:=v_count+1;

update dp_xl_sb_re set sortno = v_count where global_id = rec.global_id and xl_global_id = node_xlid;

end loop;

end loop;

end if;

--排序結束

end ;

通過儲存過程實現分頁

create procedure dbo commonpageselect sqlwhere varchar 1000 查詢條件 pagenum int 20,每頁的記錄數 beginline int 1,第幾頁,預設第一頁 sqltable varchar 5000 要查詢的表或檢視,也可以一句s...

通過儲存過程分頁

asp.net中實現分明功能,主要運用的是aspnetpager,再呼叫儲存過程進行分頁,該方法適合運用的範圍非常廣,不錯,set ansi nulls on set quoted identifier on goalter procedure dbo getpagerdata 表名 tbname ...

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

使用儲存過程複製表,使用儲存過程來複製錶比使用自定義函式更簡單,因為自定義函式返回多行結果需要用游標,但帶游標的查詢語句不能用於create as。create or replace procedure createtable tname in varchar2,id in number is sq...