當前位置:首頁 » 編程語言 » 遞歸sql語句

遞歸sql語句

發布時間: 2025-01-08 11:31:50

sql 怎麼遞歸查詢的方法:

1.創建測試表,createtabletest_connect(idnumber,p_idnumber);

❷ 遞歸SQL語句、索引的HEIGHT和BLEVEL以及SELECT FOR UPDATE相關問題

1,所謂的遞歸sql就是在運行當前的sql時調用另外一個sql,如果另外一個sql又調用了另一個sql,那麼遞歸深度就是1(從0開始)。

2,unique scan一般出現在掃描具有unique約束的索引列上:

scott@ORCL>select * from emp where empno=7788;

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- -------------- ---------- ---------- ----------
7788 TEST ANALYST 7566 09-12月-83 10000 20

執行計劃
----------------------------------------------------------
Plan hash value: 1181765974

---------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
---------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 37 | 1 (0)| 00:00:01 |
| 1 | TABLE ACCESS BY INDEX ROWID| EMP | 1 | 37 | 1 (0)| 00:00:01 |
|* 2 | INDEX UNIQUE SCAN | EMP_EMPNO_IDX | 1 | | 0 (0)| 00:00:01 |
---------------------------------------------------------------------------------------------

因為CBO知道這個索引是唯一的,所以確褲瞎定在掃描時只會返回一個rowid。

而range scan一般是掃描非唯一索引時,原理同上含旦,不再贅述。

3,scott@ORCL>analyze index emp_empno_idx validate structure;

索引已分析

scott@ORCL>select HEIGHT from index_stats;

HEIGHT
----------
1

scott@ORCL>select blevel from user_indexes where index_name='EMP_EMPNO_IDX'談純擾;

BLEVEL
----------
0

另外平衡樹的索引結構如下:

1
/\
/ \
2 3
/ \
4 5

height也就是索引的高度,這里是3。

而blevel指的是從根遍歷到當前塊要走的路徑長度,比如:2,3的blevel為1;4,5的為2,根本身的blevel為0

而在user_indexes中的blevel欄位值正是上面值的最大值,通常等於樹的高度,即height值:

下面是實例說明:

scott@ORCL>create table test as select * from sys.SOURCE$;

表已創建。

scott@ORCL>desc test
名稱
-----------------------------------------------------------------------------------------------------

OBJ#
LINE
SOURCE

scott@ORCL>create index test_idx on test(obj#);

索引已創建。

scott@ORCL>analyze index test_idx validate structure;

索引已分析

scott@ORCL>select blevel from all_indexes where lower(index_name)='test_idx';

BLEVEL
----------
2

4,當然可行,因為這時其它行是沒有被鎖定的。
scott@ORCL>select * from emp where deptno=10 for update;

sys@ORCL>delete from scott.emp where deptno!=10;

已刪除11行。

其實有的問題只要自己動手實踐一下就行了,另外樹高度為三級的索引是非常罕見的,除非你的表是非常的巨大。

❸ SQL 函數遞歸

給你一個例子,跟這個差不多:
CREATE TABLE T(ID INT ,PID INT)
INSERT INTO T SELECT 1,0
UNION ALL SELECT 2,0
UNION ALL SELECT 3,1
UNION ALL SELECT 4,1
UNION ALL SELECT 5,2
UNION ALL SELECT 6,4
UNION ALL SELECT 7,3
UNION ALL SELECT 8,4
GO
--測試數據

CREATE FUNCTION F(@ID INT)
RETURNS VARCHAR(20)
AS
BEGIN
DECLARE @R VARCHAR(20)
SET @R=@ID
WHILE ISNULL(@ID,'')<>''
BEGIN
SELECT @R=CAST(PID AS VARCHAR(20))+'.'+@R FROM T WHERE ID=@ID
SELECT @ID=PID FROM T WHERE ID=@ID
END
RETURN @R
END
GO
--生成目錄

CREATE FUNCTION F2(@F VARCHAR(20))
RETURNS VARCHAR(20)
BEGIN
DECLARE @R VARCHAR(20)
SET @R=''
SET @F=SUBSTRING(@F,4,LEN(@F))
WHILE CHARINDEX('.',@F,1)<>0
BEGIN
SET @F=SUBSTRING(@F,CHARINDEX('.',@F,1)+1,LEN(@F))
SET @R='-'+@R
END
RETURN @R
END
GO
--生成前綴符號

SELECT DBO.F2(DBO.F(ID))+CAST(ID AS VARCHAR) FROM T ORDER BY DBO.F(ID)
GO

--結果

DROP TABLE T
DROP FUNCTION F
DROP FUNCTION F2

----------------------------------------------------以下為結果集--------------------------------------------------------------

1
-3
--7
-4
--6
--8
2
-5

熱點內容
玩我的世界電腦伺服器延遲怎麼辦 發布:2025-01-09 04:04:18 瀏覽:60
pythonfor條件 發布:2025-01-09 03:51:14 瀏覽:723
如何獲取代理伺服器 發布:2025-01-09 03:50:39 瀏覽:654
安卓授權管理怎麼設置在哪裡設置 發布:2025-01-09 03:24:35 瀏覽:659
玩rust要什麼配置的電腦 發布:2025-01-09 03:18:03 瀏覽:779
肥胖的腳本 發布:2025-01-09 03:11:26 瀏覽:467
沙箱腳本 發布:2025-01-09 02:53:15 瀏覽:463
資料庫第二範式 發布:2025-01-09 02:44:39 瀏覽:257
linuxtelnet開啟 發布:2025-01-09 02:43:27 瀏覽:581
python中平方 發布:2025-01-09 02:43:18 瀏覽:533