Konuyu görüntüle
IUCODERS FORUM > Programlama > Veritabanları > PL/SQL Stored Procedure
Yazar
eternal


avatar

Kayıt: 07.02.2007
22.08.2008-15:25 #50730
Selam Arkadaşlar
PL/SQL çok bilmiyorum

Şöyle bir Stored Procedure var.

CREATE OR REPLACE PROCEDURE SP_IVR_ANONS_LISTE(p_MSISDN IN VARCHAR2, p_Result OUT VARCHAR2) IS

v_result VARCHAR2(20);

CURSOR cur_ivr (p_objid NUMBER)IS
SELECT ListNo FROM TABLE_IVR_ANONS_LISTE i
WHERE i.MSISDN = p_MSISDN;

BEGIN

FOR each_item IN cur_ivr (v_result) LOOP

v_result := each_item.ListNo || ',';

END LOOP;
p_Result := v_result;
DBMS_OUTPUT.PUT_LINE
('p_Result ' || p_Result);

EXCEPTION
WHEN OTHERS THEN
p_Result := '';

END;


Ama girilen input değerine karşılık birkaç tane kayıt dönüyorsa hepsini virgül ile ayıurıp almak istiyorum.Bu kod ise direk ilkini eziyor.
Yardımcı olabilecek birileri var mı?





Yazar
nihat


avatar
Terasus
Kayıt: 18.01.2006
22.08.2008-16:05 #50731
eternal yazdi
 
Selam Arkadaşlar
PL/SQL çok bilmiyorum

Şöyle bir Stored Procedure var.

CREATE OR REPLACE PROCEDURE SP_IVR_ANONS_LISTE(p_MSISDN IN VARCHAR2, p_Result OUT VARCHAR2) IS

v_result VARCHAR2(20);

CURSOR cur_ivr (p_objid NUMBER)IS
SELECT ListNo FROM TABLE_IVR_ANONS_LISTE i
WHERE i.MSISDN = p_MSISDN;

BEGIN

FOR each_item IN cur_ivr (v_result) LOOP

v_result := each_item.ListNo || ',';

END LOOP;
p_Result := v_result;
DBMS_OUTPUT.PUT_LINE
('p_Result ' || p_Result);

EXCEPTION
WHEN OTHERS THEN
p_Result := '';

END;


Ama girilen input değerine karşılık birkaç tane kayıt dönüyorsa hepsini virgül ile ayıurıp almak istiyorum.Bu kod ise direk ilkini eziyor.
Yardımcı olabilecek birileri var mı?


Bende yeniyim PL SQL de aslında fakat;

cursor ın içine üstte input olarak NUMBER demişssin ancak v_result değeri varchar2 olarak tanımlanmış.Bu şekilde kod çalışmamalı diye düşünüyorum.Çalıştı mı gerçekten?


CREATE OR REPLACE PROCEDURE SP_IVR_ANONS_LISTE(p_MSISDN IN VARCHAR2, p_Result OUT NUMBER) IS

v_result NUMBER

CURSOR cur_ivr (p_objid NUMBER)IS
SELECT ListNo FROM TABLE_IVR_ANONS_LISTE i
WHERE i.MSISDN = p_MSISDN;

BEGIN

FOR each_item IN cur_ivr (v_result) LOOP

v_result := each_item.ListNo;

p_Result = v_result;
DBMS_OUTPUT.PUT (p_Result || ',');
END LOOP;

EXCEPTION
WHEN OTHERS THEN
p_Result := NULL;

END;

Yalnız bu en sondakine de virgul koyar.Varchar olarak yazdırmak istiyorsan kidaha şık olur,number format yapman gerekir.





Yazar
orhan


avatar
istanbul
admin
Kayıt: 17.11.2005
22.08.2008-16:25 #50733
SELECT MAX(TRIM(',' FROM (SYS_CONNECT_BY_PATH(USVS_NO,',')))) AS result 
 FROM ( 
--query start
SELECT USVS_NO, ROW_NUMBER() OVER (order by USVS_NO asc) AS rowno
 FROM SN_VERI_ELEMANLARI 
--query end
)
 START WITH rowno = 1
 CONNECT BY PRIOR rowno = rowno - 1

bu query resultseti virgul ile ayrilmis sekilde dondurur.
bunu procedure yaparsan işini gorecektir.
0,3,4,8,10,11,12,13,14

gibi





N/A
Yazar
keox17


avatar
ist
Kayıt: 27.06.2006
22.08.2008-16:37 #50735
eternal yazdi
 
Selam Arkadaşlar
PL/SQL çok bilmiyorum

Şöyle bir Stored Procedure var.

CREATE OR REPLACE PROCEDURE SP_IVR_ANONS_LISTE(p_MSISDN IN VARCHAR2, p_Result OUT VARCHAR2) IS

v_result VARCHAR2(20);

CURSOR cur_ivr (p_objid NUMBER)IS
SELECT ListNo FROM TABLE_IVR_ANONS_LISTE i
WHERE i.MSISDN = p_MSISDN;

BEGIN

FOR each_item IN cur_ivr (v_result) LOOP

v_result := each_item.ListNo || ',';

END LOOP;
p_Result := v_result;
DBMS_OUTPUT.PUT_LINE
('p_Result ' || p_Result);

EXCEPTION
WHEN OTHERS THEN
p_Result := '';

END;


Ama girilen input değerine karşılık birkaç tane kayıt dönüyorsa hepsini virgül ile ayıurıp almak istiyorum.Bu kod ise direk ilkini eziyor.
Yardımcı olabilecek birileri var mı?



BEGIN

FOR each_item IN cur_ivr (v_result) LOOP

v_result := each_item.ListNo || ',';

END LOOP;
p_Result := v_result;
DBMS_OUTPUT.PUT_LINE
('p_Result ' || p_Result);

END LOOP un altindakileri v_result in asagidaki gibi yerlestirirsen sanirim sonuc alirsin.

BEGIN

FOR each_item IN cur_ivr (v_result) LOOP

v_result := each_item.ListNo || ',';
p_Result := v_result;
DBMS_OUTPUT.PUT_LINE
('p_Result ' || p_Result);

END LOOP;









Del.icio.us
Digg
Facebook
Furl
Google
Blink
Simpy
Spurl
Y! MyWeb