我通過將 NVL() 函式應用于每一列來連接所有列。
我正在使用 python 連接到 oracle db,所以我可以輕松獲取列名,然后對串列應用一些連接來獲得所需的選擇查詢,例如:
select NVL(col1,'?')||NVL(col2,'?')...
它作業正常,直到聚合值超過 4k 個字符。
我試圖搜索并找到關于 listagg 的問題,但問題是它是垂直使用的,我想按行連接。
我用來生成 MD5 的連接值。
uj5u.com熱心網友回復:
將它們連接為一個 CLOB。要做到這一點,要么從EMPTY_CLOB():
SELECT EMPTY_CLOB()||NVL(col1,'?')||NVL(col2,'?')...
或用于TO_CLOB一切:
SELECT TO_CLOB(NVL(col1,'?'))||TO_CLOB(NVL(col2,'?'))...
或者就TO_CLOB在第一列:
SELECT TO_CLOB(NVL(col1,'?'))||NVL(col2,'?')...
db<>在這里擺弄
uj5u.com熱心網友回復:
你正在選擇那條長字串,對吧?一個變數?在 Oracle 的 SQL 級別,它僅限于VARCHAR2(4000),但在 PL/SQL 中它變得32K如此 - 一種選擇是切換到 PL/SQL。
否則,使用CLOB資料型別而不是VARCHAR2.
與您正在做的事情無關,但是 -NVL函式用于在COL1is 的情況下獲取一些值NULL。你在做什么是沒用的,因為你正在將可能的NULL值“轉換”COL1成一個空字串(兩個連續的單引號,''),這在 Oracle 中相當于NULL所以你可以
select col1 || col2 || ...
如果它是,那將是有道理的
select nvl(col1, 'x') || nvl(col2, 'x') || ...
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/327527.html
下一篇:在oracle表中自動更改狀態
