gpt4 book ai didi

oracle - 从表中选择DISTINCT CLOB_COLUMN;

转载 作者:行者123 更新时间:2023-12-03 23:27:19 28 4
gpt4 key购买 nike

我想找到不同的CLOB值,这些值可以假定包含在名为COPIA的表中的CLOB_COLUMN列(CLOB类型)。

我选择了一种解决此问题的方法,但我希望给出一个简单的SELECT如下:SELECT DISTINCT CLOB_COLUMN FROM TABLE避免错误“ ORA-00932:不一致的数据类型:预期的-得到了CLOB”

我该如何实现?

预先感谢您的合作。这是我想过的程序方式:

-- Find the distinct CLOB values that can assume the column called CLOB_COLUMN (of type CLOB)
-- contained in the table called COPIA
-- Before the execution of the following PL/SQL script, the CLOB values (including duplicates)
-- are contained in the source table, called S1
-- At the end of the excecution of the PL/SQL script, the distinct values of the column called CLOB_COLUMN
-- can be find in the target table called S2

BEGIN
EXECUTE IMMEDIATE 'TRUNCATE TABLE S1 DROP STORAGE';

EXECUTE IMMEDIATE 'DROP TABLE S1 CASCADE CONSTRAINTS PURGE';
EXCEPTION
WHEN OTHERS
THEN
BEGIN
NULL;
END;
END;

BEGIN
EXECUTE IMMEDIATE 'TRUNCATE TABLE S2 DROP STORAGE';

EXECUTE IMMEDIATE 'DROP TABLE S2 CASCADE CONSTRAINTS PURGE';
EXCEPTION
WHEN OTHERS
THEN
BEGIN
NULL;
END;
END;

CREATE GLOBAL TEMPORARY TABLE S1
ON COMMIT PRESERVE ROWS
AS
SELECT CLOB_COLUMN FROM COPIA;

CREATE GLOBAL TEMPORARY TABLE S2
ON COMMIT PRESERVE ROWS
AS
SELECT *
FROM S1
WHERE 3 = 9;

BEGIN
DECLARE
CONTEGGIO NUMBER;

CURSOR C1
IS
SELECT CLOB_COLUMN FROM S1;

C1_REC C1%ROWTYPE;
BEGIN
FOR C1_REC IN C1
LOOP
-- How many records, in S2 table, are equal to c1_rec.clob_column?
SELECT COUNT (*)
INTO CONTEGGIO
FROM S2 BETA
WHERE DBMS_LOB.
COMPARE (BETA.CLOB_COLUMN,
C1_REC.CLOB_COLUMN) = 0;

-- If it does not exist, in S2, a record equal to c1_rec.clob_column,
-- insert c1_rec.clob_column in the table called S2
IF CONTEGGIO = 0
THEN
BEGIN
INSERT INTO S2
VALUES (C1_REC.CLOB_COLUMN);

COMMIT;
END;
END IF;
END LOOP;
END;
END;

最佳答案

使用这种方法。在表概要文件中,列的内容为NCLOB。我添加了where子句以缩短运行时间,

with
r as (select rownum i, content from profile where package = 'intl'),
s as (select distinct (select min(i) from r where dbms_lob.compare(r.content, t.content) = 0) min_i from profile t where t.package = 'intl')
select (select content from r where r.i = s.min_i) content from s
;


它不会因为效率而赢得任何奖励,但是应该可以工作。

关于oracle - 从表中选择DISTINCT CLOB_COLUMN;,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3921982/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com