2017-09-26 6 views
0

私はINを使用してこのクエリを実行しようとしていますが、型がCLOBでない場合は機能しません。 パラメータp_rutがCLOBで、INを使用する必要があるクエリが必要です。なぜなら、比較する行をさらに返すselectが存在するからです。 INでパラメータCLOBを使用するにはどうすればよいですか?INにCLOBを使用していますか? ORACLE

PROCEDURE INSERT_TEST (o_dat out o_cursor, p_rut in CLOB) 
AS 
BEGIN 

OPEN o_dat FOR  

select * from cliente 
     where rut in (p_rut); 

END; 

テーブルCLIENTE

を使用でき
CREATE TABLE CLIENTE 
(
    PRODUCTO  VARCHAR(50), 
    RUT   VARCHAR2(50), 
    DV   VARCHAR2(50), 
    FONO1   VARCHAR2(50), 
    FONO2   VARCHAR2(50), 
    FONO3   VARCHAR2(50), 
    FONO4   VARCHAR2(50), 
    FONO5   VARCHAR2(50), 
    FONO6   VARCHAR2(50),    
    COMUNA  VARCHAR2(50), 
    EDAD   NUMBER(8), 
    SEXO   NUMBER(8), 
    DIASMORA  NUMBER(8), 
    AÑODEUDA  NUMBER(8), 
    PAGOMINIMO NUMBER(8), 
) 
; 
+2

RUTはvarcahr2(50)ですので、これを1つのクローブと比較しようとしています。どのように多くのvarchar2の文字列を1つのclobに入れても、それは1つのままになります。あなたは非常に異なるアプローチが必要です。 –

+0

あなたが書いたことは、 'p_rut'のデータ型に関係なく意味をなさないものです。 'p_rut'がカンマで区切られた値のリストであり、' rut'をそれらと比較する必要があるのはどういう意味ですか? – mathguy

+0

「IN」がなぜ必要なのかはっきりしていませんか?私は 'p_rut'がCLOBである必要があることを理解しています。しかしなぜIN? – LiborStefek

答えて

0

:その中で使用して

DBMS_LOB.INSTR (
    lob_loc IN CLOB  CHARACTER SET ANY_CS, 
    pattern IN VARCHAR2 CHARACTER SET lob_loc%CHARSET, 
    offset  IN INTEGER := 1, 
    nth  IN INTEGER := 1) 
    RETURN INTEGER; 

PROCEDURE INSERT_TEST (o_dat out o_cursor, p_rut in CLOB) 
AS 
BEGIN 

OPEN o_dat FOR  

select * from cliente 
     where DBMS_LOB.INSTR (p_rut,rut)>0; 

END; 
+0

しかしこれは別のことです。内部パラメータ 'p_rut'に' rut'があるかどうかをテストします。 – LiborStefek

+0

clobはINで使用できない長い文字列ですので、rutがp_rut内に少なくとも1回存在するかどうかを見たいと思っていました。あなたが達成しようとしていることを私がさらに助けることができるように説明してください。 –

0

すなわちCLOBを使用することはできませんので、私はちょうどでしたvarchar2にキャストします。

select * from cliente 
     where rut in (CAST (p_rut AS VARCHAR2(100)); 
関連する問題