blob1

发布: (2025年12月12日 GMT+8 23:52)
1 min read
原文: Dev.to

Source: Dev.to

SQL 查询

WITH VersionsToAscii AS (
  SELECT
    t.INTERNIDENTITY,
    t.INTERNINSTID,
    t.INTERNVERSION,
    t.INTERNTIMESTAMP,
    t.IOIID,
    RTRIM(
      XMLAGG(
        XMLELEMENT(E, c.chunk_content) ORDER BY c.chunk_num
      ).EXTRACT('//text()').GETCLOBVAL()
    ) AS full_text
  FROM CacheIOIStates t
  -- For each row t, generate chunk rows 1..N where N = CEIL(DBMS_LOB.GETLENGTH(t.VERSIONS)/4000)
  CROSS JOIN LATERAL (
    SELECT level AS chunk_num,
           blob_to_text_range(t.VERSIONS,
                              (level * 4000 - 3999),
                              (level * 4000)) AS chunk_content
    FROM dual
    CONNECT BY level <= CEIL(NVL(DBMS_LOB.GETLENGTH(t.VERSIONS),0) / 4000)
  ) c
  WHERE
    t.INTERNTIMESTAMP = to_oratime_from_syb($TARGET_INTERNTIMESTAMP)
    AND t.IOIID = $OKEY
    AND c.chunk_content IS NOT NULL
  GROUP BY
    t.INTERNIDENTITY,
    t.INTERNINSTID,
    t.INTERNVERSION,
    t.INTERNTIMESTAMP,
    t.IOIID
)
SELECT
    m.INTERNIDENTITY || '~' ||
    m.INTERNINSTID || '~' ||
    m.INTERNVERSION || '~' ||
    format_ts(m.INTERNTIMESTAMP) || '~' ||
    m.INTERNRECTYPE || '~' ||
    m.IOIID || '~' ||
    m.AUTOREFRESH || '~' ||
    m.SYMBOL || '~' ||
    v.full_text || '~' ||
    m.ORDERID || '~' ||
    m.SLICE || '~' ||
    m.EXECUTEDQTY
FROM CACHEIOISTATES m
JOIN VersionsToAscii v
  ON m.IOIID = v.IOIID
 AND m.INTERNTIMESTAMP = v.INTERNTIMESTAMP
-- If you still want to *require* the first-1000-char hash to match, add it:
AND STANDARD_HASH(DBMS_LOB.SUBSTR(v.full_text, 1000, 1)) =
    STANDARD_HASH(UTL_RAW.CAST_TO_VARCHAR2(DBMS_LOB.SUBSTR(m.VERSIONS, 1000, 1)))
WHERE
  m.INTERNTIMESTAMP = to_oratime_from_syb($TARGET_INTERNTIMESTAMP)
  AND m.IOIID = $OKEY;
Back to Blog

相关文章

阅读更多 »

sql10

设置 sql SET VERIFY OFF FEEDBACK OFF HEADING OFF ECHO ON SET SERVEROUTPUT ON -- 捕获参数或默认为空字符串 无提示 COLUMN p_flag_col NEW_VA...

Oracle 合并 INTO

!Forem 徽标 https://media2.dev.to/dynamic/image/width=65,height=,fit=scale-down,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%...

创建10

SQL 查询:从 `user_tab_columns` 表中查找列名为 **'INTERNTIMESTAMP'** 且数据类型匹配 **'TIME…'** 的表名,然后获取这些表在最近 45 天内的行数,例如: ```sql SELECT utc.table_name, xt.rows_last_45_days FROM ( SELECT table_name FROM user_tab_columns WHERE UPPER(column_name) = 'INTERNTIMESTAMP' AND data_type LIKE 'TIME%' ) utc JOIN ( -- 这里假设有一个查询返回每个表最近45天的行数 SELECT table_name, rows_last_45_days FROM some_other_source ) xt ON utc.table_name = xt.table_name; ```