{"id":104642,"date":"2026-09-12T21:09:14","date_gmt":"2026-09-12T13:09:14","guid":{"rendered":"https:\/\/www.wsisp.com\/helps\/104642.html"},"modified":"2026-09-12T21:09:14","modified_gmt":"2026-09-12T13:09:14","slug":"sql-oracle-21c-paging","status":"publish","type":"post","link":"https:\/\/www.wsisp.com\/helps\/104642.html","title":{"rendered":"sql: Oracle 21c paging"},"content":{"rendered":"<h3>\u6587\u7ae0\u7eb2\u8981<\/h3>\n<ul>\n<li>\u4e00\u3001\u5efa\u8868\u4e0e\u57fa\u7840\u7ed3\u6784&#xff1a;\u521b\u5efa TimeZoneMappings \u8868&#xff0c;\u5305\u542b IANA \u65f6\u533a\u3001Windows \u65f6\u533a\u3001\u663e\u793a\u540d\u79f0\u3001\u6392\u5e8f\u5b57\u6bb5\u7b49&#xff0c;\u5e76\u8bbe\u7f6e\u4e3b\u952e\u3001\u552f\u4e00\u7ea6\u675f\u4e0e\u81ea\u589e RowVersion\u3002<\/li>\n<li>\u4e8c\u3001\u89e6\u53d1\u5668\u4e0e\u7d22\u5f15&#xff1a;\u5b9e\u73b0 UpdatedAt \u81ea\u52a8\u66f4\u65b0\u89e6\u53d1\u5668&#xff0c;\u4ee5\u53ca\u7528\u4e8e\u5206\u9875\u548c\u5168\u6587\u68c0\u7d22\u7684\u5404\u7c7b\u7d22\u5f15\u3002<\/li>\n<li>\u4e09\u3001\u5206\u9875\u5b58\u50a8\u8fc7\u7a0b&#xff1a;\u63d0\u4f9b\u4f20\u7edf\u9875\u7801\u5206\u9875&#xff08;sp_timezone_page&#xff09;\u4e0e\u6e38\u6807\u5206\u9875&#xff08;sp_timezone_cursor&#xff09;\u4e24\u79cd\u65b9\u6848&#xff0c;\u9002\u914d\u4e0d\u540c\u6570\u636e\u91cf\u573a\u666f\u3002<\/li>\n<li>\u56db\u3001\u5168\u6587\u68c0\u7d22\u5b9e\u73b0&#xff1a;\u57fa\u4e8e Oracle Text \u521b\u5efa\u4e2d\u82f1\u6587\u5168\u6587\u7d22\u5f15&#xff0c;\u5e76\u5b9e\u73b0\u5168\u6587\u68c0\u7d22\u6e38\u6807\u5206\u9875\u5b58\u50a8\u8fc7\u7a0b&#xff08;sp_timezone_search_ft&#xff09;\u3002<\/li>\n<li>\u4e94\u3001Python \u8c03\u7528\u793a\u4f8b&#xff1a;\u4f7f\u7528 python-oracledb \u8fde\u63a5 Oracle 21c&#xff0c;\u6f14\u793a\u9875\u7801\u5206\u9875\u3001\u6e38\u6807\u5206\u9875\u4e0e\u5168\u6587\u68c0\u7d22\u5206\u9875\u7684\u5b8c\u6574\u8c03\u7528\u65b9\u5f0f\u3002<\/li>\n<li>\u516d\u3001\u8fd0\u884c\u7ed3\u679c&#xff1a;\u5c55\u793a\u5206\u9875\u4e0e\u5168\u6587\u68c0\u7d22\u7684\u5b9e\u9645\u8f93\u51fa\u6548\u679c\u3002<\/li>\n<\/ul>\n<\/p>\n<p>&#8212; &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<br \/>\n&#8212; Oracle 21c: TimeZoneMappings \u5efa\u8868 &#043; 432 \u6761\u6570\u636e &#043; \u5206\u9875\u5b58\u50a8\u8fc7\u7a0b<br \/>\n&#8212; \u5171 432 \u6761\u552f\u4e00 IANA \u65f6\u533a, Sort 1..432&#xff08;\u4e0e MySQL \u7248\u6570\u636e\u5b8c\u5168\u4e00\u81f4&#xff09;<br \/>\n&#8212; \u6267\u884c\u5de5\u5177: SQL*Plus \/ PL\/SQL Developer \/ DBeaver \u5747\u53ef<br \/>\n&#8212; &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<br \/>\n&#8212; 0) \u6e05\u7406\u65e7\u8868&#xff08;\u9996\u6b21\u6267\u884c\u53ef\u6ce8\u91ca\u6389&#xff09;<br \/>\nBEGIN<br \/>\nEXECUTE IMMEDIATE &#039;DROP TABLE TimeZoneMappings CASCADE CONSTRAINTS&#039;;<br \/>\nEXCEPTION WHEN OTHERS THEN NULL;<br \/>\nEND;<br \/>\n\/<br \/>\n&#8212; 1) \u5efa\u8868&#xff08;VARCHAR2 \u7528 CHAR \u8bed\u4e49&#xff0c;\u517c\u5bb9\u4e2d\u6587&#xff1b;RowVersion \u7528 IDENTITY \u81ea\u589e&#xff09;<br \/>\nCREATE TABLE TimeZoneMappings (<br \/>\nTimeZoneId        RAW(16)          PRIMARY KEY,<br \/>\nIanaTimeZoneId    VARCHAR2(100 CHAR),<br \/>\nWindowsTimeZoneId VARCHAR2(100 CHAR) NOT NULL,<br \/>\nDailyResetOffset  NUMBER(10)        NOT NULL,<br \/>\nSort              NUMBER(10)        DEFAULT 0 NOT NULL,        &#8212; \u4fee\u590d&#xff1a;DEFAULT \u5fc5\u987b\u5728 NOT NULL \u4e4b\u524d<br \/>\nDisplayName       VARCHAR2(200 CHAR),<br \/>\nDisplayNameHK     VARCHAR2(200 CHAR),<br \/>\nDisplayNameEN     VARCHAR2(200 CHAR),<br \/>\nIsActive          NUMBER            DEFAULT 1 NOT NULL,        &#8212; \u4fee\u590d&#xff1a;DEFAULT \u5fc5\u987b\u5728 NOT NULL \u4e4b\u524d<br \/>\nCreatedAt         TIMESTAMP         DEFAULT SYSTIMESTAMP,<br \/>\nUpdatedAt         TIMESTAMP,<br \/>\nRowVersion        NUMBER(20)        GENERATED BY DEFAULT AS IDENTITY NOT NULL,<br \/>\nCONSTRAINT UQ_IanaTimeZoneId UNIQUE (IanaTimeZoneId)<br \/>\n);<br \/>\n\/<br \/>\nselect * from TimeZoneMappings;<br \/>\n&#8212; 2) UpdatedAt \u81ea\u52a8\u66f4\u65b0\u89e6\u53d1\u5668&#xff08;Oracle \u65e0 ON UPDATE&#xff09;<br \/>\nCREATE OR REPLACE TRIGGER trg_tz_updated<br \/>\nBEFORE UPDATE ON TimeZoneMappings<br \/>\nFOR EACH ROW<br \/>\nBEGIN<br \/>\n:NEW.UpdatedAt :&#061; SYSTIMESTAMP;<br \/>\nEND;<br \/>\n\/<br \/>\n&#8212; 3) \u6e38\u6807\u5206\u9875\u6838\u5fc3\u7d22\u5f15<br \/>\nCREATE INDEX IX_IsActive_Sort ON TimeZoneMappings (IsActive, Sort, RowVersion);<br \/>\n\/<br \/>\n&#8212; 5) \u5b58\u50a8\u8fc7\u7a0b: \u4f20\u7edf\u9875\u7801\u5206\u9875&#xff08;\u7ba1\u7406\u540e\u53f0\/\u5c0f\u8868&#xff09;<br \/>\nCREATE OR REPLACE PROCEDURE sp_timezone_page(<br \/>\np_keyword     IN  VARCHAR2,<br \/>\np_page_number IN  NUMBER,<br \/>\np_page_size   IN  NUMBER,<br \/>\np_total       OUT NUMBER,<br \/>\np_cur         OUT SYS_REFCURSOR<br \/>\n) AS<br \/>\nv_offset NUMBER;<br \/>\nv_kw     VARCHAR2(220 CHAR) :&#061; &#039;%&#039;;<br \/>\nBEGIN<br \/>\nIF p_page_number IS NULL OR p_page_number &lt; 1 THEN p_page_number :&#061; 1; END IF;<br \/>\nIF p_page_size IS NULL OR p_page_size &lt; 1 THEN p_page_size :&#061; 20;<br \/>\nELSIF p_page_size &gt; 200 THEN p_page_size :&#061; 200;<br \/>\nEND IF;<br \/>\nv_offset :&#061; (p_page_number &#8211; 1) * p_page_size;<br \/>\nIF p_keyword IS NOT NULL AND p_keyword &amp;lt;&amp;gt; &#039;&#039; THEN<br \/>\n    v_kw :&#061; &#039;%&#039; || REPLACE(REPLACE(REPLACE(p_keyword, &#039;\\\\&#039;, &#039;\\\\\\\\&#039;), &#039;%&#039;, &#039;\\\\%&#039;), &#039;_&#039;, &#039;\\\\_&#039;) || &#039;%&#039;;<br \/>\nEND IF;<\/p>\n<p>SELECT COUNT(*) INTO p_total<br \/>\nFROM TimeZoneMappings<br \/>\nWHERE IsActive &#061; 1<br \/>\n  AND (v_kw &#061; &#039;%&#039; OR DisplayName LIKE v_kw ESCAPE &#039;\\\\&#039;<br \/>\n                OR DisplayNameHK LIKE v_kw ESCAPE &#039;\\\\&#039;<br \/>\n                OR DisplayNameEN LIKE v_kw ESCAPE &#039;\\\\&#039;);<\/p>\n<p>OPEN p_cur FOR<br \/>\n    SELECT TimeZoneId, IanaTimeZoneId, WindowsTimeZoneId, DailyResetOffset,<br \/>\n           Sort, RowVersion, DisplayName, DisplayNameHK, DisplayNameEN<br \/>\n    FROM TimeZoneMappings<br \/>\n    WHERE IsActive &#061; 1<br \/>\n      AND (v_kw &#061; &#039;%&#039; OR DisplayName LIKE v_kw ESCAPE &#039;\\\\&#039;<br \/>\n                    OR DisplayNameHK LIKE v_kw ESCAPE &#039;\\\\&#039;<br \/>\n                    OR DisplayNameEN LIKE v_kw ESCAPE &#039;\\\\&#039;)<br \/>\n    ORDER BY Sort, RowVersion<br \/>\n    OFFSET v_offset ROWS FETCH NEXT p_page_size ROWS ONLY;<br \/>\nEND;<br \/>\n\/<br \/>\n&#8212; 6) \u5b58\u50a8\u8fc7\u7a0b: \u6e38\u6807\u5206\u9875&#xff08;\u4ebf\u7ea7\u4e3b\u63a8&#xff0c;\u4e0e MySQL \u7248\u540c\u8bed\u4e49&#xff09;<br \/>\nCREATE OR REPLACE PROCEDURE sp_timezone_cursor(<br \/>\np_keyword          IN  VARCHAR2,<br \/>\np_last_sort        IN  NUMBER,<br \/>\np_last_row_version IN  NUMBER,<br \/>\np_page_size        IN  NUMBER,<br \/>\np_has_more         OUT NUMBER,<br \/>\np_cur              OUT SYS_REFCURSOR<br \/>\n) AS<br \/>\nv_first_page NUMBER :&#061; 0;<br \/>\nv_kw         VARCHAR2(220 CHAR) :&#061; &#039;%&#039;;<br \/>\nBEGIN<br \/>\nIF p_page_size IS NULL OR p_page_size &lt; 1 THEN p_page_size :&#061; 20;<br \/>\nELSIF p_page_size &gt; 200 THEN p_page_size :&#061; 200;<br \/>\nEND IF;<br \/>\nIF p_last_sort IS NULL OR p_last_row_version IS NULL THEN v_first_page :&#061; 1; END IF;<br \/>\nIF p_keyword IS NOT NULL AND p_keyword &amp;lt;&amp;gt; &#039;&#039; THEN<br \/>\n    v_kw :&#061; &#039;%&#039; || REPLACE(REPLACE(REPLACE(p_keyword, &#039;\\\\&#039;, &#039;\\\\\\\\&#039;), &#039;%&#039;, &#039;\\\\%&#039;), &#039;_&#039;, &#039;\\\\_&#039;) || &#039;%&#039;;<br \/>\nEND IF;<\/p>\n<p>IF v_first_page &#061; 1 THEN<br \/>\n    OPEN p_cur FOR<br \/>\n        SELECT TimeZoneId, IanaTimeZoneId, WindowsTimeZoneId, DailyResetOffset,<br \/>\n               Sort, RowVersion, DisplayName, DisplayNameHK, DisplayNameEN<br \/>\n        FROM TimeZoneMappings<br \/>\n        WHERE IsActive &#061; 1<br \/>\n          AND (v_kw &#061; &#039;%&#039; OR DisplayName LIKE v_kw ESCAPE &#039;\\\\&#039;<br \/>\n                        OR DisplayNameHK LIKE v_kw ESCAPE &#039;\\\\&#039;<br \/>\n                        OR DisplayNameEN LIKE v_kw ESCAPE &#039;\\\\&#039;)<br \/>\n        ORDER BY Sort, RowVersion<br \/>\n        FETCH FIRST p_page_size ROWS ONLY;<br \/>\nELSE<br \/>\n    OPEN p_cur FOR<br \/>\n        SELECT TimeZoneId, IanaTimeZoneId, WindowsTimeZoneId, DailyResetOffset,<br \/>\n               Sort, RowVersion, DisplayName, DisplayNameHK, DisplayNameEN<br \/>\n        FROM TimeZoneMappings<br \/>\n        WHERE IsActive &#061; 1<br \/>\n          AND (v_kw &#061; &#039;%&#039; OR DisplayName LIKE v_kw ESCAPE &#039;\\\\&#039;<br \/>\n                        OR DisplayNameHK LIKE v_kw ESCAPE &#039;\\\\&#039;<br \/>\n                        OR DisplayNameEN LIKE v_kw ESCAPE &#039;\\\\&#039;)<br \/>\n          AND (Sort &amp;gt; p_last_sort<br \/>\n               OR (Sort &#061; p_last_sort AND RowVersion &amp;gt; p_last_row_version))<br \/>\n        ORDER BY Sort, RowVersion<br \/>\n        FETCH FIRST p_page_size ROWS ONLY;<br \/>\nEND IF;<\/p>\n<p>&#8212; \u662f\u5426\u8fd8\u6709\u4e0b\u4e00\u9875&#xff08;EXISTS \u77ed\u8def&#xff09;<br \/>\nIF v_first_page &#061; 1 THEN<br \/>\n    SELECT CASE WHEN EXISTS (<br \/>\n        SELECT 1 FROM TimeZoneMappings<br \/>\n        WHERE IsActive &#061; 1<br \/>\n          AND (v_kw &#061; &#039;%&#039; OR DisplayName LIKE v_kw ESCAPE &#039;\\\\&#039;<br \/>\n                        OR DisplayNameHK LIKE v_kw ESCAPE &#039;\\\\&#039;<br \/>\n                        OR DisplayNameEN LIKE v_kw ESCAPE &#039;\\\\&#039;)<br \/>\n    ) THEN 1 ELSE 0 END INTO p_has_more FROM DUAL;<br \/>\nELSE<br \/>\n    SELECT CASE WHEN EXISTS (<br \/>\n        SELECT 1 FROM TimeZoneMappings<br \/>\n        WHERE IsActive &#061; 1<br \/>\n          AND (v_kw &#061; &#039;%&#039; OR DisplayName LIKE v_kw ESCAPE &#039;\\\\&#039;<br \/>\n                        OR DisplayNameHK LIKE v_kw ESCAPE &#039;\\\\&#039;<br \/>\n                        OR DisplayNameEN LIKE v_kw ESCAPE &#039;\\\\&#039;)<br \/>\n          AND (Sort &amp;gt; p_last_sort<br \/>\n               OR (Sort &#061; p_last_sort AND RowVersion &amp;gt; p_last_row_version))<br \/>\n    ) THEN 1 ELSE 0 END INTO p_has_more FROM DUAL;<br \/>\nEND IF;<br \/>\nEND;<br \/>\n\/<br \/>\n&#8212; &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<br \/>\n&#8212; \u9a8c\u8bc1: SELECT COUNT(*) FROM TimeZoneMappings;  &#8212; \u5e94\u8fd4\u56de 432<br \/>\n&#8212;       SELECT COUNT(DISTINCT IanaTimeZoneId) FROM TimeZoneMappings;  &#8212; 432<br \/>\n&#8212; &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<br \/>\nCREATE INDEX idx_tz_en_text ON TimeZoneMappings(DisplayNameEN) INDEXTYPE IS CTXSYS.CONTEXT;<br \/>\nCREATE INDEX idx_tz_iana_text ON TimeZoneMappings(IanaTimeZoneId) INDEXTYPE IS CTXSYS.CONTEXT;  &#8212; \u5982\u679c\u62a5\u9519&#xff0c;\u6267\u884c\u4ee5\u4e0b<br \/>\n&#8212; \u67e5\u770b\u662f\u5426\u5b58\u5728 CTXSYS \u7528\u6237<br \/>\nSELECT * FROM all_users WHERE username &#061; &#039;CTXSYS&#039;;<br \/>\n&#8212; \u89e3\u9501 CTXSYS \u7528\u6237&#xff08;\u5982\u679c\u5b58\u5728\u4f46\u88ab\u9501\u5b9a&#xff09;<br \/>\nALTER USER CTXSYS ACCOUNT UNLOCK;<br \/>\nGRANT ctxapp TO C##GEOVINDU;<br \/>\nGRANT EXECUTE ON ctxsys.ctx_ddl TO C##GEOVINDU;<br \/>\n&#8212; \u5982\u679c\u6267\u884c GRANT ctxapp TO YOUR_USER; \u65f6\u63d0\u793a\u89d2\u8272\u4e0d\u5b58\u5728&#xff0c;\u8bf4\u660e\u4f60\u7684 Oracle 21c \u6570\u636e\u5e93\u5728\u5b89\u88c5\u65f6\u6ca1\u6709\u52fe\u9009 Oracle Text \u7ec4\u4ef6\u3002\u6b64\u65f6\u9700\u8981\u4ee5 SYS \u8eab\u4efd\u8fd0\u884c\u521d\u59cb\u5316\u811a\u672c\u6765\u5b89\u88c5&#xff1a;<br \/>\n&#8212; \u4ee5 SYS \u767b\u5f55<br \/>\n&#8212; &#064;$ORACLE_HOME\/ctx\/admin\/catctx.sql CTXSYS SYSAUX TEMP NOLOCK;<br \/>\nBEGIN<br \/>\n&#8212; \u521b\u5efa\u4e00\u4e2a\u4e2d\u6587\u5206\u8bcd\u5668\u504f\u597d<br \/>\nctxsys.ctx_ddl.create_preference(&#039;chinese_lexer&#039;, &#039;chinese_vgram_lexer&#039;);<br \/>\nEND;<br \/>\n\/<br \/>\n&#8212; \u4f7f\u7528\u6307\u5b9a\u7684\u4e2d\u6587\u5206\u8bcd\u5668\u521b\u5efa\u5168\u6587\u7d22\u5f15<br \/>\nCREATE INDEX idx_tz_iana_text<br \/>\nON TimeZoneMappings(IanaTimeZoneId)<br \/>\nINDEXTYPE IS CTXSYS.CONTEXT<br \/>\nPARAMETERS (&#039;lexer chinese_lexer&#039;);<br \/>\nCREATE OR REPLACE PROCEDURE sp_timezone_page(<br \/>\np_page_num     IN  NUMBER,         &#8212; \u9875\u7801&#xff08;\u4ece1\u5f00\u59cb&#xff09;<br \/>\np_page_size    IN  NUMBER,         &#8212; \u6bcf\u9875\u5927\u5c0f<br \/>\np_order_by     IN  VARCHAR2,       &#8212; \u6392\u5e8f\u5b57\u6bb5&#xff0c;\u5982 &#039;Sort ASC, RowVersion ASC&#039;<br \/>\np_total_count  OUT NUMBER,         &#8212; \u8f93\u51fa&#xff1a;\u603b\u8bb0\u5f55\u6570<br \/>\np_cursor       OUT SYS_REFCURSOR   &#8212; \u8f93\u51fa&#xff1a;\u5f53\u524d\u9875\u6570\u636e\u6e38\u6807<br \/>\n) AS<br \/>\nBEGIN<br \/>\n&#8212; 1. \u83b7\u53d6\u603b\u8bb0\u5f55\u6570<br \/>\nSELECT COUNT(*) INTO p_total_count FROM TimeZoneMappings;<br \/>\n&#8212; 2. \u83b7\u53d6\u5f53\u524d\u9875\u6570\u636e (\u4f7f\u7528 12c&#043; \u7684 OFFSET &#8230; FETCH \u8bed\u6cd5)<br \/>\nOPEN p_cursor FOR<br \/>\n    SELECT<br \/>\n        TimeZoneId,<br \/>\n        IanaTimeZoneId,<br \/>\n        WindowsTimeZoneId,<br \/>\n        DailyResetOffset,<br \/>\n        Sort,<br \/>\n        DisplayName,<br \/>\n        DisplayNameHK,<br \/>\n        DisplayNameEN,<br \/>\n        IsActive,<br \/>\n        CreatedAt,<br \/>\n        UpdatedAt,<br \/>\n        RowVersion<br \/>\n    FROM TimeZoneMappings<br \/>\n    ORDER BY Sort ASC, RowVersion ASC  &#8212; \u9ed8\u8ba4\u6309 Sort \u548c RowVersion \u6392\u5e8f<br \/>\n    OFFSET (p_page_num &#8211; 1) * p_page_size ROWS<br \/>\n    FETCH NEXT p_page_size ROWS ONLY;<br \/>\nEND;<br \/>\n\/<br \/>\nCREATE OR REPLACE PROCEDURE sp_timezone_cursor(<br \/>\np_last_sort        IN  NUMBER,         &#8212; \u4e0a\u4e00\u9875\u6700\u540e\u4e00\u6761\u8bb0\u5f55\u7684 Sort \u503c<br \/>\np_last_row_version IN  NUMBER,         &#8212; \u4e0a\u4e00\u9875\u6700\u540e\u4e00\u6761\u8bb0\u5f55\u7684 RowVersion \u503c<br \/>\np_page_size        IN  NUMBER,         &#8212; \u6bcf\u9875\u5927\u5c0f<br \/>\np_has_more         OUT NUMBER,         &#8212; \u8f93\u51fa&#xff1a;\u662f\u5426\u8fd8\u6709\u4e0b\u4e00\u9875 (1&#061;\u6709, 0&#061;\u65e0)<br \/>\np_cursor           OUT SYS_REFCURSOR   &#8212; \u8f93\u51fa&#xff1a;\u5f53\u524d\u9875\u6570\u636e\u6e38\u6807<br \/>\n) AS<br \/>\n&#8212; 1. \u53d8\u91cf\u58f0\u660e\u5fc5\u987b\u653e\u5728 AS \u548c BEGIN \u4e4b\u95f4<br \/>\nv_temp_cursor SYS_REFCURSOR;<br \/>\nv_row_count   NUMBER :&#061; 0;<br \/>\nv_rec         TimeZoneMappings%ROWTYPE;<br \/>\nBEGIN<br \/>\n&#8212; 2. \u6253\u5f00\u4e34\u65f6\u6e38\u6807&#xff0c;\u591a\u53d6 1 \u6761\u7528\u4e8e\u5224\u65ad\u662f\u5426\u8fd8\u6709\u4e0b\u4e00\u9875<br \/>\nOPEN v_temp_cursor FOR<br \/>\nSELECT<br \/>\nTimeZoneId, IanaTimeZoneId, WindowsTimeZoneId, DailyResetOffset,<br \/>\nSort, DisplayName, DisplayNameHK, DisplayNameEN,<br \/>\nIsActive, CreatedAt, UpdatedAt, RowVersion<br \/>\nFROM TimeZoneMappings<br \/>\nWHERE (p_last_sort IS NULL AND p_last_row_version IS NULL)  &#8212; \u9996\u9875\u67e5\u8be2<br \/>\nOR (Sort &gt; p_last_sort)                                  &#8212; \u5c55\u5f00\u7684\u5143\u7ec4\u6bd4\u8f83<br \/>\nOR (Sort &#061; p_last_sort AND RowVersion &gt; p_last_row_version)<br \/>\nORDER BY Sort ASC, RowVersion ASC<br \/>\nFETCH NEXT p_page_size &#043; 1 ROWS ONLY;  &#8212; \u5173\u952e&#xff1a;\u591a\u53d6\u4e00\u6761<br \/>\n&#8212; 3. \u5faa\u73af\u4e34\u65f6\u6e38\u6807&#xff0c;\u8ba1\u7b97\u5b9e\u9645\u8fd4\u56de\u7684\u884c\u6570<br \/>\nLOOP<br \/>\n    FETCH v_temp_cursor INTO v_rec;<br \/>\n    EXIT WHEN v_temp_cursor%NOTFOUND;<br \/>\n    v_row_count :&#061; v_row_count &#043; 1;<br \/>\nEND LOOP;<br \/>\nCLOSE v_temp_cursor;<\/p>\n<p>&#8212; 4. \u5982\u679c\u53d6\u51fa\u7684\u884c\u6570 &amp;gt; \u9875\u9762\u5927\u5c0f&#xff0c;\u8bf4\u660e\u8fd8\u6709\u4e0b\u4e00\u9875<br \/>\np_has_more :&#061; CASE WHEN v_row_count &amp;gt; p_page_size THEN 1 ELSE 0 END;<\/p>\n<p>&#8212; 5. \u6253\u5f00\u6b63\u5f0f\u6e38\u6807\u8fd4\u56de\u7ed9\u5e94\u7528\u5c42&#xff08;\u53ea\u53d6\u521a\u597d\u4e00\u9875\u7684\u6570\u636e&#xff09;<br \/>\nOPEN p_cursor FOR<br \/>\n    SELECT<br \/>\n        TimeZoneId, IanaTimeZoneId, WindowsTimeZoneId, DailyResetOffset,<br \/>\n        Sort, DisplayName, DisplayNameHK, DisplayNameEN,<br \/>\n        IsActive, CreatedAt, UpdatedAt, RowVersion<br \/>\n    FROM TimeZoneMappings<br \/>\n    WHERE (p_last_sort IS NULL AND p_last_row_version IS NULL)<br \/>\n       OR (Sort &amp;gt; p_last_sort)<br \/>\n       OR (Sort &#061; p_last_sort AND RowVersion &amp;gt; p_last_row_version)<br \/>\n    ORDER BY Sort ASC, RowVersion ASC<br \/>\n    FETCH NEXT p_page_size ROWS ONLY;<br \/>\nEND;<br \/>\n\/<br \/>\nCREATE OR REPLACE PROCEDURE sp_timezone_search_ft(<br \/>\np_search_expr    IN  VARCHAR2,<br \/>\np_last_sort      IN  NUMBER,<br \/>\np_last_row_ver   IN  NUMBER,<br \/>\np_page_size      IN  NUMBER,<br \/>\np_has_more       OUT NUMBER,<br \/>\np_cursor         OUT SYS_REFCURSOR<br \/>\n) AS<br \/>\nv_row_count NUMBER :&#061; 0;<br \/>\nv_rec       TimeZoneMappings%ROWTYPE;<br \/>\nv_temp_cur  SYS_REFCURSOR;<br \/>\nBEGIN<br \/>\n&#8212; 1. \u6253\u5f00\u4e34\u65f6\u6e38\u6807&#xff0c;\u591a\u53d6 1 \u6761\u7528\u4e8e\u5224\u65ad\u662f\u5426\u8fd8\u6709\u4e0b\u4e00\u9875<br \/>\nOPEN v_temp_cur FOR<br \/>\nSELECT * FROM (<br \/>\nSELECT * FROM (<br \/>\n&#8212; \u82f1\u6587\u7d22\u5f15 1<br \/>\nSELECT * FROM TimeZoneMappings<br \/>\nWHERE CONTAINS(DisplayNameEN, p_search_expr, 1) &gt; 0<br \/>\nAND ((p_last_sort IS NULL AND p_last_row_ver IS NULL) OR (Sort &gt; p_last_sort) OR (Sort &#061; p_last_sort AND RowVersion &gt; p_last_row_ver))<br \/>\nUNION<br \/>\n&#8212; IANA \u7d22\u5f15 2<br \/>\nSELECT * FROM TimeZoneMappings<br \/>\nWHERE CONTAINS(IanaTimeZoneId, p_search_expr, 2) &gt; 0<br \/>\nAND ((p_last_sort IS NULL AND p_last_row_ver IS NULL) OR (Sort &gt; p_last_sort) OR (Sort &#061; p_last_sort AND RowVersion &gt; p_last_row_ver))<br \/>\nUNION<br \/>\n&#8212; \u7b80\u4f53\u4e2d\u6587\u7d22\u5f15 3<br \/>\nSELECT * FROM TimeZoneMappings<br \/>\nWHERE CONTAINS(DisplayName, p_search_expr, 3) &gt; 0<br \/>\nAND ((p_last_sort IS NULL AND p_last_row_ver IS NULL) OR (Sort &gt; p_last_sort) OR (Sort &#061; p_last_sort AND RowVersion &gt; p_last_row_ver))<br \/>\nUNION<br \/>\n&#8212; \u7e41\u4f53\u4e2d\u6587\u7d22\u5f15 4<br \/>\nSELECT * FROM TimeZoneMappings<br \/>\nWHERE CONTAINS(DisplayNameHK, p_search_expr, 4) &gt; 0<br \/>\nAND ((p_last_sort IS NULL AND p_last_row_ver IS NULL) OR (Sort &gt; p_last_sort) OR (Sort &#061; p_last_sort AND RowVersion &gt; p_last_row_ver))<br \/>\n)<br \/>\nORDER BY Sort ASC, RowVersion ASC<br \/>\n)<br \/>\nFETCH NEXT p_page_size &#043; 1 ROWS ONLY;<br \/>\n&#8212; 2. \u5faa\u73af\u4e34\u65f6\u6e38\u6807&#xff0c;\u8ba1\u7b97\u5b9e\u9645\u8fd4\u56de\u7684\u884c\u6570<br \/>\nLOOP<br \/>\n    FETCH v_temp_cur INTO v_rec;<br \/>\n    EXIT WHEN v_temp_cur%NOTFOUND;<br \/>\n    v_row_count :&#061; v_row_count &#043; 1;<br \/>\nEND LOOP;<br \/>\nCLOSE v_temp_cur;<\/p>\n<p>&#8212; 3. \u5224\u65ad\u662f\u5426\u8fd8\u6709\u4e0b\u4e00\u9875<br \/>\np_has_more :&#061; CASE WHEN v_row_count &amp;gt; p_page_size THEN 1 ELSE 0 END;<\/p>\n<p>&#8212; 4. \u6253\u5f00\u6b63\u5f0f\u6e38\u6807\u8fd4\u56de\u7ed9\u5e94\u7528\u5c42<br \/>\nOPEN p_cursor FOR<br \/>\n    SELECT * FROM (<br \/>\n        SELECT * FROM (<br \/>\n            SELECT * FROM TimeZoneMappings<br \/>\n            WHERE CONTAINS(DisplayNameEN, p_search_expr, 1) &amp;gt; 0<br \/>\n              AND ((p_last_sort IS NULL AND p_last_row_ver IS NULL) OR (Sort &amp;gt; p_last_sort) OR (Sort &#061; p_last_sort AND RowVersion &amp;gt; p_last_row_ver))<br \/>\n            UNION<br \/>\n            SELECT * FROM TimeZoneMappings<br \/>\n            WHERE CONTAINS(IanaTimeZoneId, p_search_expr, 2) &amp;gt; 0<br \/>\n              AND ((p_last_sort IS NULL AND p_last_row_ver IS NULL) OR (Sort &amp;gt; p_last_sort) OR (Sort &#061; p_last_sort AND RowVersion &amp;gt; p_last_row_ver))<br \/>\n            UNION<br \/>\n            SELECT * FROM TimeZoneMappings<br \/>\n            WHERE CONTAINS(DisplayName, p_search_expr, 3) &amp;gt; 0<br \/>\n              AND ((p_last_sort IS NULL AND p_last_row_ver IS NULL) OR (Sort &amp;gt; p_last_sort) OR (Sort &#061; p_last_sort AND RowVersion &amp;gt; p_last_row_ver))<br \/>\n            UNION<br \/>\n            SELECT * FROM TimeZoneMappings<br \/>\n            WHERE CONTAINS(DisplayNameHK, p_search_expr, 4) &amp;gt; 0<br \/>\n              AND ((p_last_sort IS NULL AND p_last_row_ver IS NULL) OR (Sort &amp;gt; p_last_sort) OR (Sort &#061; p_last_sort AND RowVersion &amp;gt; p_last_row_ver))<br \/>\n        )<br \/>\n        ORDER BY Sort ASC, RowVersion ASC<br \/>\n    )<br \/>\n    FETCH NEXT p_page_size ROWS ONLY;<br \/>\nEND;<br \/>\n\/<br \/>\n&#8212; \u5c06\u73b0\u6709\u7684 RowVersion \u5168\u90e8\u66ff\u6362\u4e3a\u57fa\u4e8e Sort \u6392\u5e8f\u7684\u552f\u4e00\u9012\u589e\u6570\u5b57<br \/>\nMERGE INTO TimeZoneMappings t<br \/>\nUSING (<br \/>\nSELECT TimeZoneId, ROW_NUMBER() OVER (ORDER BY Sort ASC) AS new_rv<br \/>\nFROM TimeZoneMappings<br \/>\n) src ON (t.TimeZoneId &#061; src.TimeZoneId)<br \/>\nWHEN MATCHED THEN<br \/>\nUPDATE SET t.RowVersion &#061; src.new_rv;<br \/>\nSELECT Sort, RowVersion, IanaTimeZoneId, DisplayNameEN<br \/>\nFROM TimeZoneMappings<br \/>\nORDER BY Sort ASC;<br \/>\n&#8212; \u5982\u679c\u7d22\u5f15\u4e0d\u5b58\u5728&#xff0c;\u8fd9\u4e24\u53e5\u4f1a\u62a5\u9519&#xff0c;\u5ffd\u7565\u5373\u53ef<br \/>\nDROP INDEX idx_tz_en_text;<br \/>\nDROP INDEX idx_tz_iana_text;<br \/>\n&#8212; \u4e3a\u82f1\u6587\u540d\u79f0\u521b\u5efa\u5168\u6587\u7d22\u5f15<br \/>\nCREATE INDEX idx_tz_en_text<br \/>\nON TimeZoneMappings(DisplayNameEN)<br \/>\nINDEXTYPE IS CTXSYS.CONTEXT;<br \/>\n&#8212; \u4e3a IANA \u65f6\u533aID\u521b\u5efa\u5168\u6587\u7d22\u5f15<br \/>\nCREATE INDEX idx_tz_iana_text<br \/>\nON TimeZoneMappings(IanaTimeZoneId)<br \/>\nINDEXTYPE IS CTXSYS.CONTEXT;<br \/>\n&#8212; \u540c\u6b65\u4e24\u4e2a\u7d22\u5f15<br \/>\nEXEC CTX_DDL.SYNC_INDEX(&#039;idx_tz_en_text&#039;);<br \/>\nEXEC CTX_DDL.SYNC_INDEX(&#039;idx_tz_iana_text&#039;);<br \/>\n&#8212; \u6d4b\u8bd5\u662f\u5426\u80fd\u641c\u5230 Pacific<br \/>\nSELECT IanaTimeZoneId, DisplayNameEN<br \/>\nFROM TimeZoneMappings<br \/>\nWHERE CONTAINS(IanaTimeZoneId, &#039;Pacific&#039;, 1) &gt; 0;<br \/>\nDROP INDEX idx_tz_en_text;<br \/>\nDROP INDEX idx_tz_iana_text;<br \/>\nBEGIN<br \/>\n&#8212; \u5982\u679c\u504f\u597d\u5df2\u5b58\u5728&#xff0c;\u4f1a\u62a5\u9519&#xff0c;\u8fd9\u91cc\u76f4\u63a5\u5ffd\u7565\u5373\u53ef<br \/>\nCTXSYS.CTX_DDL.CREATE_PREFERENCE(&#039;chinese_lexer&#039;, &#039;chinese_vgram_lexer&#039;);<br \/>\nEXCEPTION WHEN OTHERS THEN NULL;<br \/>\nEND;<br \/>\n\/<br \/>\n&#8212; \u4e3a DisplayName \u521b\u5efa\u4e2d\u6587\u5168\u6587\u7d22\u5f15<br \/>\nCREATE INDEX idx_tz_en_text<br \/>\nON TimeZoneMappings(DisplayNameEN)<br \/>\nINDEXTYPE IS CTXSYS.CONTEXT<br \/>\nPARAMETERS (&#039;lexer chinese_lexer&#039;);<br \/>\n&#8212; \u4e3a IanaTimeZoneId \u521b\u5efa\u4e2d\u6587\u5168\u6587\u7d22\u5f15&#xff08;\u867d\u7136\u4e3b\u8981\u662f\u82f1\u6587&#xff0c;\u4f46\u52a0\u4e0a\u4e2d\u6587\u5206\u8bcd\u5668\u4e5f\u80fd\u517c\u5bb9&#xff09;<br \/>\nCREATE INDEX idx_tz_iana_text<br \/>\nON TimeZoneMappings(IanaTimeZoneId)<br \/>\nINDEXTYPE IS CTXSYS.CONTEXT<br \/>\nPARAMETERS (&#039;lexer chinese_lexer&#039;);<br \/>\n&#8212;  \u624b\u52a8\u540c\u6b65\u7d22\u5f15<br \/>\nEXEC CTX_DDL.SYNC_INDEX(&#039;idx_tz_en_text&#039;);<br \/>\nEXEC CTX_DDL.SYNC_INDEX(&#039;idx_tz_iana_text&#039;);<br \/>\n&#8212; 1. \u5220\u9664\u53ef\u80fd\u5b58\u5728\u7684\u65e7\u4e2d\u6587\u7d22\u5f15&#xff08;\u5982\u679c\u62a5\u9519\u4e0d\u5b58\u5728&#xff0c;\u5ffd\u7565\u5373\u53ef&#xff09;<br \/>\nDROP INDEX idx_tz_cn_text;<br \/>\nDROP INDEX idx_tz_hk_text;<br \/>\n&#8212; 2. \u521b\u5efa\u4e2d\u6587\u5206\u8bcd\u5668\u504f\u597d&#xff08;\u9632\u6b62\u91cd\u540d\u62a5\u9519&#xff09;<br \/>\nBEGIN<br \/>\nCTXSYS.CTX_DDL.DROP_PREFERENCE(&#039;my_chinese_vgram&#039;);<br \/>\nEXCEPTION WHEN OTHERS THEN NULL;<br \/>\nEND;<br \/>\n\/<br \/>\nBEGIN<br \/>\nCTXSYS.CTX_DDL.CREATE_PREFERENCE(&#039;my_chinese_vgram&#039;, &#039;chinese_vgram_lexer&#039;);<br \/>\nEND;<br \/>\n\/<br \/>\n&#8212; 3. \u521b\u5efa\u4e2d\u6587\u5168\u6587\u7d22\u5f15<br \/>\nCREATE INDEX idx_tz_cn_text<br \/>\nON TimeZoneMappings(DisplayName)<br \/>\nINDEXTYPE IS CTXSYS.CONTEXT<br \/>\nPARAMETERS (&#039;lexer my_chinese_vgram&#039;);<br \/>\nCREATE INDEX idx_tz_hk_text<br \/>\nON TimeZoneMappings(DisplayNameHK)<br \/>\nINDEXTYPE IS CTXSYS.CONTEXT<br \/>\nPARAMETERS (&#039;lexer my_chinese_vgram&#039;);<br \/>\n&#8212; 4. \u3010\u5173\u952e\u3011\u624b\u52a8\u540c\u6b65\u7d22\u5f15<br \/>\nEXEC CTXSYS.CTX_DDL.SYNC_INDEX(&#039;idx_tz_cn_text&#039;);<br \/>\nEXEC CTXSYS.CTX_DDL.SYNC_INDEX(&#039;idx_tz_hk_text&#039;);<br \/>\nSELECT token_text<br \/>\nFROM DR$idx_tz_cn_text$I<br \/>\nWHERE token_text LIKE &#039;%\u5317%&#039; OR token_text LIKE &#039;%\u5c9b%&#039;;<br \/>\nSELECT token_text<br \/>\nFROM DR$idx_tz_hk_text$I<br \/>\nWHERE token_text LIKE &#039;%\u5cf6%&#039; OR token_text LIKE &#039;%\u5317%&#039;;<br \/>\nSELECT IanaTimeZoneId, DisplayName<br \/>\nFROM TimeZoneMappings<br \/>\nWHERE CONTAINS(IanaTimeZoneId, &#039;\u7559\u5c3c\u6c6a&#039;, 1) &gt; 0;<br \/>\n&#8212; \u6d4b\u8bd5\u4e2d\u6587\u641c\u7d22&#xff08;\u6ce8\u610f&#xff1a;chinese_vgram_lexer \u652f\u6301\u90e8\u5206\u5339\u914d&#xff0c;\u641c\u201c\u6807\u51c6\u201d\u6216\u201c\u4e2d\u56fd\u201d\u5e94\u8be5\u90fd\u80fd\u547d\u4e2d&#xff09;<br \/>\nSELECT IanaTimeZoneId, DisplayName<br \/>\nFROM TimeZoneMappings<br \/>\nWHERE CONTAINS(DisplayName, &#039;\u6807\u51c6&#039;, 1) &gt; 0;<br \/>\nSELECT DisplayName, LENGTH(DisplayName), LENGTHB(DisplayName)<br \/>\nFROM TimeZoneMappings<br \/>\nWHERE DisplayName LIKE &#039;%\u5c9b%&#039;;<br \/>\nSELECT DisplayNameHK, LENGTH(DisplayNameHK), LENGTHB(DisplayNameHK)<br \/>\nFROM TimeZoneMappings<br \/>\nWHERE DisplayNameHK LIKE &#039;%\u5cf6%&#039;;<br \/>\nDROP INDEX idx_tz_en_text;<br \/>\nDROP INDEX idx_tz_iana_text;<br \/>\nBEGIN<br \/>\nCTXSYS.CTX_DDL.DROP_PREFERENCE(&#039;my_chinese_vgram&#039;);<br \/>\nEXCEPTION WHEN OTHERS THEN NULL; &#8212; \u5982\u679c\u4e0d\u5b58\u5728\u5219\u5ffd\u7565<br \/>\nEND;<br \/>\n\/<br \/>\nBEGIN<br \/>\nCTXSYS.CTX_DDL.CREATE_PREFERENCE(&#039;my_chinese_vgram&#039;, &#039;chinese_vgram_lexer&#039;);<br \/>\nEND;<br \/>\n\/<br \/>\nCREATE INDEX idx_tz_en_text<br \/>\nON TimeZoneMappings(DisplayNameEN)<br \/>\nINDEXTYPE IS CTXSYS.CONTEXT<br \/>\nPARAMETERS (&#039;lexer my_chinese_vgram&#039;);<br \/>\nCREATE INDEX idx_tz_iana_text<br \/>\nON TimeZoneMappings(IanaTimeZoneId)<br \/>\nINDEXTYPE IS CTXSYS.CONTEXT<br \/>\nPARAMETERS (&#039;lexer my_chinese_vgram&#039;);<br \/>\nEXEC CTXSYS.CTX_DDL.SYNC_INDEX(&#039;idx_tz_en_text&#039;);<br \/>\nEXEC CTXSYS.CTX_DDL.SYNC_INDEX(&#039;idx_tz_iana_text&#039;);<br \/>\nSELECT VALUE FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER &#061; &#039;NLS_CHARACTERSET&#039;;<br \/>\n&#8212; \u8865\u6551\u73b0\u6709\u6570\u636e\u7684 RowVersion (\u4f7f\u7528 Sort \u503c\u4f5c\u4e3a\u521d\u59cb\u7248\u672c\u53f7&#xff0c;\u4fdd\u8bc1\u552f\u4e00\u9012\u589e)<br \/>\nCREATE OR REPLACE TRIGGER trg_tz_rowversion<br \/>\nBEFORE INSERT ON TimeZoneMappings<br \/>\nFOR EACH ROW<br \/>\nBEGIN<br \/>\n&#8212; \u4ec5\u5728\u672a\u63d0\u4f9b RowVersion \u65f6&#xff0c;\u81ea\u52a8\u5206\u914d\u4e0b\u4e00\u4e2a\u5e8f\u5217\u503c<br \/>\n&#8212; \u5047\u8bbe\u4f60\u7684\u8868\u540d\u662f TimeZoneMappings&#xff0c;Oracle \u81ea\u52a8\u751f\u6210\u7684\u5e8f\u5217\u901a\u5e38\u547d\u540d\u4e3a ISEQ$$_XXXXX<br \/>\n&#8212; \u5982\u679c\u4e0d\u786e\u5b9a\u5e8f\u5217\u540d&#xff0c;\u53ef\u4ee5\u4f7f\u7528\u4ee5\u4e0b\u901a\u7528\u65b9\u5f0f&#xff1a;<br \/>\nIF :NEW.RowVersion IS NULL THEN<br \/>\n&#8212; \u6ce8\u610f&#xff1a;\u5982\u679c\u4f60\u7684\u5efa\u8868\u8bed\u53e5\u4f7f\u7528\u4e86 IDENTITY&#xff0c;\u8fd9\u91cc\u53ef\u4ee5\u76f4\u63a5\u4e0d\u5199\u89e6\u53d1\u5668&#xff0c;<br \/>\n&#8212; \u6216\u8005\u4f7f\u7528\u5982\u4e0b\u65b9\u5f0f\u5b89\u5168\u8d4b\u503c&#xff1a;<br \/>\nSELECT TimeZoneMappings_SEQ.NEXTVAL INTO :NEW.RowVersion FROM DUAL;<br \/>\n&#8212; (\u6ce8&#xff1a;\u5982\u679c\u4e0d\u77e5\u9053\u81ea\u52a8\u751f\u6210\u7684\u5e8f\u5217\u540d&#xff0c;\u5efa\u8bae\u5728\u5efa\u8868\u65f6\u663e\u5f0f\u6307\u5b9a\u5e8f\u5217)<br \/>\nEND IF;<br \/>\nEND;<br \/>\n\/<br \/>\n&#8212; 1. \u5220\u9664\u65e7\u7d22\u5f15<br \/>\nDROP INDEX idx_tz_en_text;<br \/>\nDROP INDEX idx_tz_iana_text;<br \/>\n&#8212; 2. \u91cd\u65b0\u521b\u5efa\u7d22\u5f15 (\u4f7f\u7528\u4e2d\u6587\u5206\u8bcd\u5668\u517c\u5bb9\u82f1\u6587)<br \/>\nBEGIN<br \/>\nctxsys.ctx_ddl.create_preference(&#039;my_lexer&#039;, &#039;chinese_vgram_lexer&#039;);<br \/>\nEXCEPTION WHEN OTHERS THEN NULL; &#8212; \u504f\u597d\u5df2\u5b58\u5728\u5219\u5ffd\u7565<br \/>\nEND;<br \/>\n\/<br \/>\nCREATE INDEX idx_tz_en_text ON TimeZoneMappings(DisplayNameEN)<br \/>\nINDEXTYPE IS CTXSYS.CONTEXT<br \/>\nPARAMETERS (&#039;lexer my_lexer&#039;);<br \/>\nCREATE INDEX idx_tz_iana_text ON TimeZoneMappings(IanaTimeZoneId)<br \/>\nINDEXTYPE IS CTXSYS.CONTEXT<br \/>\nPARAMETERS (&#039;lexer my_lexer&#039;);<br \/>\n&#8212; 3. \u3010\u5173\u952e\u3011\u624b\u52a8\u540c\u6b65\u7d22\u5f15&#xff0c;\u5426\u5219\u521a\u63d2\u5165\u7684\u6570\u636e\u641c\u4e0d\u5230<br \/>\nEXEC CTX_DDL.SYNC_INDEX(&#039;idx_tz_en_text&#039;);<br \/>\nEXEC CTX_DDL.SYNC_INDEX(&#039;idx_tz_iana_text&#039;);<br \/>\nDECLARE<br \/>\nv_cursor      SYS_REFCURSOR;<br \/>\nv_total_count NUMBER;<br \/>\nv_rec         TimeZoneMappings%ROWTYPE;<br \/>\nBEGIN<br \/>\nsp_timezone_page(<br \/>\np_page_num    &#061;&gt; 1,<br \/>\np_page_size   &#061;&gt; 5,<br \/>\np_order_by    &#061;&gt; &#039;Sort ASC&#039;,<br \/>\np_total_count &#061;&gt; v_total_count,<br \/>\np_cursor      &#061;&gt; v_cursor<br \/>\n);<br \/>\nDBMS_OUTPUT.PUT_LINE(&#039;&#061;&#061;&#061; sp_timezone_page \u6d4b\u8bd5\u7ed3\u679c &#061;&#061;&#061;&#039;);<br \/>\nDBMS_OUTPUT.PUT_LINE(&#039;\u603b\u8bb0\u5f55\u6570: &#039; || v_total_count);<br \/>\nLOOP<br \/>\n    FETCH v_cursor INTO v_rec;<br \/>\n    EXIT WHEN v_cursor%NOTFOUND;<br \/>\n    DBMS_OUTPUT.PUT_LINE(&#039;Sort: &#039; || v_rec.Sort || &#039;, RV: &#039; || v_rec.RowVersion || &#039;, IANA: &#039; || v_rec.IanaTimeZoneId);<br \/>\nEND LOOP;<br \/>\nCLOSE v_cursor;<br \/>\nEND;<br \/>\n\/<br \/>\nDECLARE<br \/>\nv_cursor   SYS_REFCURSOR;<br \/>\nv_has_more NUMBER;<br \/>\nv_rec      TimeZoneMappings%ROWTYPE;<br \/>\nBEGIN<br \/>\nsp_timezone_cursor(<br \/>\np_last_sort        &#061;&gt; NULL,<br \/>\np_last_row_version &#061;&gt; NULL,<br \/>\np_page_size        &#061;&gt; 5,<br \/>\np_has_more         &#061;&gt; v_has_more,<br \/>\np_cursor           &#061;&gt; v_cursor<br \/>\n);<br \/>\nDBMS_OUTPUT.PUT_LINE(&#039;&#061;&#061;&#061; sp_timezone_cursor \u6d4b\u8bd5\u7ed3\u679c &#061;&#061;&#061;&#039;);<br \/>\nDBMS_OUTPUT.PUT_LINE(&#039;\u662f\u5426\u8fd8\u6709\u4e0b\u4e00\u9875 (1&#061;\u662f, 0&#061;\u5426): &#039; || v_has_more);<br \/>\nLOOP<br \/>\n    FETCH v_cursor INTO v_rec;<br \/>\n    EXIT WHEN v_cursor%NOTFOUND;<br \/>\n    DBMS_OUTPUT.PUT_LINE(&#039;Sort: &#039; || v_rec.Sort || &#039;, RV: &#039; || v_rec.RowVersion || &#039;, IANA: &#039; || v_rec.IanaTimeZoneId);<br \/>\nEND LOOP;<br \/>\nCLOSE v_cursor;<br \/>\nEND;<br \/>\n\/<br \/>\nSET SERVEROUTPUT ON;<br \/>\nDECLARE<br \/>\nv_cursor   SYS_REFCURSOR;<br \/>\nv_has_more NUMBER;<br \/>\nv_rec      TimeZoneMappings%ROWTYPE;<br \/>\nBEGIN<br \/>\nsp_timezone_search_ft(<br \/>\np_search_expr  &#061;&gt; &#039;\u5317&#039;,<br \/>\np_last_sort    &#061;&gt; NULL,<br \/>\np_last_row_ver &#061;&gt; NULL,<br \/>\np_page_size    &#061;&gt; 5,<br \/>\np_has_more     &#061;&gt; v_has_more,<br \/>\np_cursor       &#061;&gt; v_cursor<br \/>\n);<br \/>\nDBMS_OUTPUT.PUT_LINE(&#039;&#061;&#061;&#061; \u6d4b\u8bd5 1&#xff1a;\u641c\u7d22\u7b80\u4f53\u4e2d\u6587 \u5317 &#061;&#061;&#061;&#039;);<br \/>\nDBMS_OUTPUT.PUT_LINE(&#039;\u662f\u5426\u8fd8\u6709\u4e0b\u4e00\u9875 (1&#061;\u662f, 0&#061;\u5426): &#039; || v_has_more);<br \/>\nLOOP<br \/>\n    FETCH v_cursor INTO v_rec;<br \/>\n    EXIT WHEN v_cursor%NOTFOUND;<br \/>\n    DBMS_OUTPUT.PUT_LINE(&#039;Sort: &#039; || v_rec.Sort || &#039;, RV: &#039; || v_rec.RowVersion || &#039;, IANA: &#039; || v_rec.IanaTimeZoneId || &#039;, CN: &#039; || v_rec.DisplayName);<br \/>\nEND LOOP;<br \/>\nCLOSE v_cursor;<br \/>\nEND;<br \/>\n\/<br \/>\nDECLARE<br \/>\nv_cursor   SYS_REFCURSOR;<br \/>\nv_has_more NUMBER;<br \/>\nv_rec      TimeZoneMappings%ROWTYPE;<br \/>\nBEGIN<br \/>\nsp_timezone_search_ft(<br \/>\np_search_expr  &#061;&gt; &#039;\u5cf6&#039;,<br \/>\np_last_sort    &#061;&gt; NULL,<br \/>\np_last_row_ver &#061;&gt; NULL,<br \/>\np_page_size    &#061;&gt; 5,<br \/>\np_has_more     &#061;&gt; v_has_more,<br \/>\np_cursor       &#061;&gt; v_cursor<br \/>\n);<br \/>\nDBMS_OUTPUT.PUT_LINE(&#039;&#061;&#061;&#061; \u6d4b\u8bd5 2&#xff1a;\u641c\u7d22\u7e41\u4f53\u4e2d\u6587 \u5cf6 &#061;&#061;&#061;&#039;);<br \/>\nDBMS_OUTPUT.PUT_LINE(&#039;\u662f\u5426\u8fd8\u6709\u4e0b\u4e00\u9875 (1&#061;\u662f, 0&#061;\u5426): &#039; || v_has_more);<br \/>\nLOOP<br \/>\n    FETCH v_cursor INTO v_rec;<br \/>\n    EXIT WHEN v_cursor%NOTFOUND;<br \/>\n    DBMS_OUTPUT.PUT_LINE(&#039;Sort: &#039; || v_rec.Sort || &#039;, RV: &#039; || v_rec.RowVersion || &#039;, IANA: &#039; || v_rec.IanaTimeZoneId || &#039;, HK: &#039; || v_rec.DisplayNameHK);<br \/>\nEND LOOP;<br \/>\nCLOSE v_cursor;<br \/>\nEND;<br \/>\n\/<br \/>\nDECLARE<br \/>\nv_cursor   SYS_REFCURSOR;<br \/>\nv_has_more NUMBER;<br \/>\nv_rec      TimeZoneMappings%ROWTYPE;<br \/>\nBEGIN<br \/>\nsp_timezone_search_ft(<br \/>\np_search_expr  &#061;&gt; &#039;Pacific&#039;,<br \/>\np_last_sort    &#061;&gt; NULL,<br \/>\np_last_row_ver &#061;&gt; NULL,<br \/>\np_page_size    &#061;&gt; 5,<br \/>\np_has_more     &#061;&gt; v_has_more,<br \/>\np_cursor       &#061;&gt; v_cursor<br \/>\n);<br \/>\nDBMS_OUTPUT.PUT_LINE(&#039;&#061;&#061;&#061; \u6d4b\u8bd5 3&#xff1a;\u641c\u7d22\u82f1\u6587 Pacific &#061;&#061;&#061;&#039;);<br \/>\nDBMS_OUTPUT.PUT_LINE(&#039;\u662f\u5426\u8fd8\u6709\u4e0b\u4e00\u9875 (1&#061;\u662f, 0&#061;\u5426): &#039; || v_has_more);<br \/>\nLOOP<br \/>\n    FETCH v_cursor INTO v_rec;<br \/>\n    EXIT WHEN v_cursor%NOTFOUND;<br \/>\n    DBMS_OUTPUT.PUT_LINE(&#039;Sort: &#039; || v_rec.Sort || &#039;, RV: &#039; || v_rec.RowVersion || &#039;, IANA: &#039; || v_rec.IanaTimeZoneId || &#039;, EN: &#039; || v_rec.DisplayNameEN);<br \/>\nEND LOOP;<br \/>\nCLOSE v_cursor;<br \/>\nEND;<br \/>\n\/<\/p>\n<p># encoding: utf-8<br \/>\n# \u7248\u6743\u6240\u6709  2026 \u00a9\u6d82\u805a\u6587\u6709\u9650\u516c\u53f8\u2122 \u00ae<br \/>\n# \u8bb8\u53ef\u4fe1\u606f\u67e5\u770b&#xff1a;\u8a00\u8a9e\u6210\u4e86\u9080\u529f\u76e1\u8cac\u7684\u529f\u81e3&#xff0c;\u9084\u9700\u8981\u884c\u7232\u6bcf\u65e5\u4f86\u503c\u73ed\u55ce<br \/>\n# \u63cf\u8ff0&#xff1a;Oracle 21c<br \/>\n# Author    : geovindu,Geovin Du \u6d82\u805a\u6587.<br \/>\n# IDE       : PyCharm 2024.3.6 python 3.11<br \/>\n# os        : windows 10<br \/>\n# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j<br \/>\n# Datetime  : 2026\/9\/12 9:51<br \/>\n# User      :  geovindu<br \/>\n# Product   : PyCharm<br \/>\n# Project   : Pysimple<br \/>\n# File      : oracelpaingtwo.py<br \/>\n# -*- coding: utf-8 -*-<br \/>\nimport uuid<br \/>\nimport oracledb<br \/>\n&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061; \u8fde\u63a5\u53c2\u6570&#xff08;\u6539\u6210\u4f60\u81ea\u5df1\u7684&#xff09; &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<br \/>\nORACLE &#061; {<br \/>\n&#034;user&#034;: &#034;C##GEOVINDU&#034;,<br \/>\n&#034;password&#034;: &#034;geovindu&#034;,<br \/>\n&#034;dsn&#034;: &#034;localhost:1521\/TechnologyGame&#034;,<br \/>\n}<br \/>\n&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<br \/>\nconn &#061; oracledb.connect(**ORACLE)<br \/>\ncur &#061; conn.cursor()<br \/>\ndef fmt_uuid(raw):<br \/>\nreturn str(uuid.UUID(bytes&#061;raw)) if raw else None<br \/>\ndef page(keyword&#061;None, page_number&#061;1, page_size&#061;20):<br \/>\n&#034;&#034;&#034;\u4f20\u7edf\u9875\u7801\u5206\u9875&#034;&#034;&#034;<br \/>\np_total &#061; cur.var(oracledb.NUMBER)<br \/>\np_cur &#061; cur.var(oracledb.CURSOR)<br \/>\ncur.callproc(&#034;sp_timezone_page&#034;, [keyword, page_number, page_size, p_total, p_cur])<br \/>\ntotal &#061; p_total.getvalue()<br \/>\nrows &#061; p_cur.getvalue().fetchall()<br \/>\nreturn rows, (total or 0)<br \/>\ndef cursor_page(keyword&#061;None, last_sort&#061;None, last_row_version&#061;None, page_size&#061;20):<br \/>\n&#034;&#034;&#034;\u6e38\u6807\u5206\u9875&#034;&#034;&#034;<br \/>\np_has_more &#061; cur.var(oracledb.NUMBER)<br \/>\np_cur &#061; cur.var(oracledb.CURSOR)<br \/>\ncur.callproc(&#034;sp_timezone_cursor&#034;, [keyword, last_sort, last_row_version, page_size, p_has_more, p_cur])<br \/>\nhas_more &#061; int(p_has_more.getvalue() or 0)<br \/>\nrows &#061; p_cur.getvalue().fetchall()<br \/>\nreturn rows, bool(has_more)<br \/>\n&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061; \u3010\u65b0\u589e\u3011\u5168\u6587\u68c0\u7d22\u6e38\u6807\u5206\u9875 &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<br \/>\ndef search_page(keyword, last_sort&#061;None, last_row_version&#061;None, page_size&#061;20):<br \/>\n&#034;&#034;&#034;\u5168\u6587\u68c0\u7d22\u5206\u9875: \u8fd4\u56de (rows, has_more)&#034;&#034;&#034;<br \/>\nif not keyword:<br \/>\nraise ValueError(&#034;search_page \u5fc5\u987b\u63d0\u4f9b keyword&#034;)<br \/>\np_has_more &#061; cur.var(oracledb.NUMBER)<br \/>\np_cur &#061; cur.var(oracledb.CURSOR)<br \/>\ncur.callproc(&#034;sp_timezone_search_ft&#034;, [keyword, last_sort, last_row_version, page_size, p_has_more, p_cur])<br \/>\nhas_more &#061; int(p_has_more.getvalue() or 0)<br \/>\nrows &#061; p_cur.getvalue().fetchall()<br \/>\nreturn rows, bool(has_more)<br \/>\n&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<br \/>\ndef print_rows(rows):<br \/>\nfor r in rows:<br \/>\nprint(f&#034;  sort&#061;{r[4]:&gt;3} rv&#061;{r[5]:&gt;4} {r[1]:&lt;28} {r[6]}&#034;)<br \/>\ndef demo_page():<br \/>\nprint(&#034;&#061;&#034; * 70)<br \/>\nprint(&#034;[1] \u4f20\u7edf\u9875\u7801\u5206\u9875: \u7b2c 1 \u9875, \u6bcf\u9875 5 \u6761, \u5173\u952e\u8bcd&#061;&#039;\u5317&#039;&#034;)<br \/>\nprint(&#034;&#061;&#034; * 70)<br \/>\nrows, total &#061; page(keyword&#061;&#034;\u5317&#034;, page_number&#061;1, page_size&#061;5)<br \/>\nprint(f&#034;\u603b\u547d\u4e2d: {total} \u6761&#034;)<br \/>\nprint_rows(rows)<br \/>\ndef demo_cursor():<br \/>\nprint(&#034;&#061;&#034; * 70)<br \/>\nprint(&#034;[2] \u6e38\u6807\u5206\u9875: \u5173\u952e\u8bcd&#061;&#039;\u5cf6&#039;, \u6bcf\u9875 3 \u6761&#034;)<br \/>\nprint(&#034;&#061;&#034; * 70)<br \/>\nkeyword &#061; &#034;\u5cf6&#034;<br \/>\nlast_sort, last_rv &#061; None, None<br \/>\npage_no &#061; 1<br \/>\nwhile True:<br \/>\nrows, has_more &#061; cursor_page(keyword, last_sort, last_rv, 3)<br \/>\nif not rows: break<br \/>\nprint(f&#034;&#8211; \u7b2c {page_no} \u9875 &#8211;&#034;)<br \/>\nprint_rows(rows)<br \/>\nlast_sort, last_rv &#061; rows[-1][4], rows[-1][11]<br \/>\nif not has_more: break<br \/>\npage_no &#043;&#061; 1<br \/>\n&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061; \u3010\u65b0\u589e\u3011\u5168\u6587\u68c0\u7d22 Demo &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<br \/>\ndef demo_search():<br \/>\nprint(&#034;&#061;&#034; * 70)<br \/>\nprint(&#034;[3] \u5168\u6587\u68c0\u7d22\u5206\u9875: \u5173\u952e\u8bcd&#061;&#039;Pacific&#039;, \u6bcf\u9875 5 \u6761&#034;)<br \/>\nprint(&#034;&#061;&#034; * 70)<br \/>\nkeyword &#061; &#034;Pacific&#034;<br \/>\nlast_sort, last_rv &#061; None, None<br \/>\npage_no &#061; 1<br \/>\nwhile True:<br \/>\nrows, has_more &#061; search_page(keyword, last_sort, last_rv, 5)<br \/>\nif not rows: break<br \/>\nprint(f&#034;&#8211; \u641c\u7d22 &#039;{keyword}&#039; \u7b2c {page_no} \u9875 &#8211;&#034;)<br \/>\nprint_rows(rows)<br \/>\nlast_sort, last_rv &#061; rows[-1][4], rows[-1][11]<br \/>\nif not has_more: break<br \/>\npage_no &#043;&#061; 1<br \/>\n&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<br \/>\nif name &#061;&#061; &#034;main&#034;:<br \/>\ntry:<br \/>\ndemo_page()<br \/>\ndemo_cursor()<br \/>\ndemo_search()  # \u3010\u65b0\u589e\u3011\u8fd0\u884c\u5168\u6587\u68c0\u7d22\u6d4b\u8bd5<br \/>\nfinally:<br \/>\ncur.close()<br \/>\nconn.close()<\/p>\n<p>\u8f93\u51fa&#xff1a;<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"\" height=\"1100\" src=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2026\/09\/20260912130912-6aa54ef842f77.png\" width=\"894\" \/><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u6587\u7ae0\u7eb2\u8981\u4e00\u3001\u5efa\u8868\u4e0e\u57fa\u7840\u7ed3\u6784&#xff1a;\u521b\u5efa TimeZoneMappings \u8868&#xff0c;\u5305\u542b IANA \u65f6\u533a\u3001Windows \u65f6\u533a\u3001\u663e\u793a\u540d\u79f0\u3001\u6392\u5e8f\u5b57\u6bb5\u7b49&#xff0c;\u5e76\u8bbe\u7f6e\u4e3b\u952e\u3001\u552f\u4e00\u7ea6\u675f\u4e0e\u81ea\u589e RowVersion\u3002\u4e8c\u3001\u89e6\u53d1\u5668\u4e0e\u7d22\u5f15&#xff1a;\u5b9e\u73b0 UpdatedAt \u81ea\u52a8\u66f4\u65b0\u89e6\u53d1\u5668&#xff0c;\u4ee5\u53ca\u7528\u4e8e\u5206\u9875\u548c\u5168\u6587\u68c0\u7d22\u7684\u5404\u7c7b\u7d22\u5f15\u3002\u4e09\u3001\u5206\u9875\u5b58\u50a8\u8fc7\u7a0b&#xff1a;\u63d0\u4f9b\u4f20\u7edf\u9875\u7801\u5206\u9875&#xff08;sp_timezone_page&#xff09;\u4e0e\u6e38\u6807\u5206\u9875&amp;#x<\/p>\n","protected":false},"author":2,"featured_media":104641,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[604,768,100],"topic":[],"class_list":["post-104642","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-server","tag-oracle","tag-sql","tag-100"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v20.3 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>sql: Oracle 21c paging - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.wsisp.com\/helps\/104642.html\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"sql: Oracle 21c paging - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\" \/>\n<meta property=\"og:description\" content=\"\u6587\u7ae0\u7eb2\u8981\u4e00\u3001\u5efa\u8868\u4e0e\u57fa\u7840\u7ed3\u6784&#xff1a;\u521b\u5efa TimeZoneMappings \u8868&#xff0c;\u5305\u542b IANA \u65f6\u533a\u3001Windows \u65f6\u533a\u3001\u663e\u793a\u540d\u79f0\u3001\u6392\u5e8f\u5b57\u6bb5\u7b49&#xff0c;\u5e76\u8bbe\u7f6e\u4e3b\u952e\u3001\u552f\u4e00\u7ea6\u675f\u4e0e\u81ea\u589e RowVersion\u3002\u4e8c\u3001\u89e6\u53d1\u5668\u4e0e\u7d22\u5f15&#xff1a;\u5b9e\u73b0 UpdatedAt \u81ea\u52a8\u66f4\u65b0\u89e6\u53d1\u5668&#xff0c;\u4ee5\u53ca\u7528\u4e8e\u5206\u9875\u548c\u5168\u6587\u68c0\u7d22\u7684\u5404\u7c7b\u7d22\u5f15\u3002\u4e09\u3001\u5206\u9875\u5b58\u50a8\u8fc7\u7a0b&#xff1a;\u63d0\u4f9b\u4f20\u7edf\u9875\u7801\u5206\u9875&#xff08;sp_timezone_page&#xff09;\u4e0e\u6e38\u6807\u5206\u9875&amp;#x\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.wsisp.com\/helps\/104642.html\" \/>\n<meta property=\"og:site_name\" content=\"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\" \/>\n<meta property=\"article:published_time\" content=\"2026-09-12T13:09:14+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2026\/09\/20260912130912-6aa54ef842f77.png\" \/>\n<meta name=\"author\" content=\"admin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"17 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/104642.html\",\"url\":\"https:\/\/www.wsisp.com\/helps\/104642.html\",\"name\":\"sql: Oracle 21c paging - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\",\"isPartOf\":{\"@id\":\"https:\/\/www.wsisp.com\/helps\/#website\"},\"datePublished\":\"2026-09-12T13:09:14+00:00\",\"dateModified\":\"2026-09-12T13:09:14+00:00\",\"author\":{\"@id\":\"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.wsisp.com\/helps\/104642.html#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.wsisp.com\/helps\/104642.html\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/104642.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.wsisp.com\/helps\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"sql: Oracle 21c paging\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/#website\",\"url\":\"https:\/\/www.wsisp.com\/helps\/\",\"name\":\"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\",\"description\":\"\u9999\u6e2f\u670d\u52a1\u5668_\u9999\u6e2f\u4e91\u670d\u52a1\u5668\u8d44\u8baf_\u670d\u52a1\u5668\u5e2e\u52a9\u6587\u6863_\u670d\u52a1\u5668\u6559\u7a0b\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.wsisp.com\/helps\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"zh-Hans\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41\",\"name\":\"admin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery\",\"contentUrl\":\"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery\",\"caption\":\"admin\"},\"sameAs\":[\"http:\/\/wp.wsisp.com\"],\"url\":\"https:\/\/www.wsisp.com\/helps\/author\/admin\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"sql: Oracle 21c paging - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.wsisp.com\/helps\/104642.html","og_locale":"zh_CN","og_type":"article","og_title":"sql: Oracle 21c paging - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","og_description":"\u6587\u7ae0\u7eb2\u8981\u4e00\u3001\u5efa\u8868\u4e0e\u57fa\u7840\u7ed3\u6784&#xff1a;\u521b\u5efa TimeZoneMappings \u8868&#xff0c;\u5305\u542b IANA \u65f6\u533a\u3001Windows \u65f6\u533a\u3001\u663e\u793a\u540d\u79f0\u3001\u6392\u5e8f\u5b57\u6bb5\u7b49&#xff0c;\u5e76\u8bbe\u7f6e\u4e3b\u952e\u3001\u552f\u4e00\u7ea6\u675f\u4e0e\u81ea\u589e RowVersion\u3002\u4e8c\u3001\u89e6\u53d1\u5668\u4e0e\u7d22\u5f15&#xff1a;\u5b9e\u73b0 UpdatedAt \u81ea\u52a8\u66f4\u65b0\u89e6\u53d1\u5668&#xff0c;\u4ee5\u53ca\u7528\u4e8e\u5206\u9875\u548c\u5168\u6587\u68c0\u7d22\u7684\u5404\u7c7b\u7d22\u5f15\u3002\u4e09\u3001\u5206\u9875\u5b58\u50a8\u8fc7\u7a0b&#xff1a;\u63d0\u4f9b\u4f20\u7edf\u9875\u7801\u5206\u9875&#xff08;sp_timezone_page&#xff09;\u4e0e\u6e38\u6807\u5206\u9875&amp;#x","og_url":"https:\/\/www.wsisp.com\/helps\/104642.html","og_site_name":"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","article_published_time":"2026-09-12T13:09:14+00:00","og_image":[{"url":"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2026\/09\/20260912130912-6aa54ef842f77.png"}],"author":"admin","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"admin","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"17 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.wsisp.com\/helps\/104642.html","url":"https:\/\/www.wsisp.com\/helps\/104642.html","name":"sql: Oracle 21c paging - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","isPartOf":{"@id":"https:\/\/www.wsisp.com\/helps\/#website"},"datePublished":"2026-09-12T13:09:14+00:00","dateModified":"2026-09-12T13:09:14+00:00","author":{"@id":"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41"},"breadcrumb":{"@id":"https:\/\/www.wsisp.com\/helps\/104642.html#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.wsisp.com\/helps\/104642.html"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.wsisp.com\/helps\/104642.html#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.wsisp.com\/helps"},{"@type":"ListItem","position":2,"name":"sql: Oracle 21c paging"}]},{"@type":"WebSite","@id":"https:\/\/www.wsisp.com\/helps\/#website","url":"https:\/\/www.wsisp.com\/helps\/","name":"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","description":"\u9999\u6e2f\u670d\u52a1\u5668_\u9999\u6e2f\u4e91\u670d\u52a1\u5668\u8d44\u8baf_\u670d\u52a1\u5668\u5e2e\u52a9\u6587\u6863_\u670d\u52a1\u5668\u6559\u7a0b","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.wsisp.com\/helps\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"zh-Hans"},{"@type":"Person","@id":"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41","name":"admin","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/image\/","url":"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery","contentUrl":"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery","caption":"admin"},"sameAs":["http:\/\/wp.wsisp.com"],"url":"https:\/\/www.wsisp.com\/helps\/author\/admin"}]}},"_links":{"self":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/posts\/104642","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/comments?post=104642"}],"version-history":[{"count":0,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/posts\/104642\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/media\/104641"}],"wp:attachment":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/media?parent=104642"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/categories?post=104642"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/tags?post=104642"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/topic?post=104642"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}