ďťż
 
PLSQL Oracle ďťż
 
PLSQL Oracle
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

PLSQL Oracle



mariaczi - 30-03-2007 00:07
PLSQL Oracle
  witam,

mam taki kawałek kodu

Kod: declare
sql_query string(250);

begin
sql_query := 'select * from skp where id_kh = :p_id_sp and anu =
''N''';
if(:data_od is not null) then
sql_query := sql_query || ' and dat_w < to_date(''' || :data_od ||
' 00:01'', ''YYYY-MM-DD HH24:MI'')';
end if;
sql_query := sql_query || ' order by id;';
dbms_output.put_line(to_char(sql_query));
for cur_skp in (SQL_QUERY);
loop
-- ciało loop'a
end loop;
end; jak wstawić sql_query w miejsce SQL_QUERY?
"normalne wpisanie" nie działa :(
chodzi mi o skonstruowanie zapytania w zależności od podania/nie
podania parametrów a następnie wykonania go i "obrobienia odpowiedzi w
pętli

pzdr. i z góry podziękowania za pomoc





mhm - 30-03-2007 00:07

  mariaczi napisał(a):
> chodzi mi o skonstruowanie zapytania w zależności od podania/nie
> podania parametrów a następnie wykonania go i "obrobienia odpowiedzi w
> pętli
>
> pzdr. i z góry podziękowania za pomoc

mam nadzieję, że o to biega...
z FAQ oraclowego:

-- Using bind variables...
sql_stmt := 'INSERT INTO dept VALUES (:1, :2, :3)';
EXECUTE IMMEDIATE sql_stmt USING dept_id, dept_name, location;

-- Returning a cursor...
sql_stmt := 'SELECT * FROM emp WHERE empno = :id';
EXECUTE IMMEDIATE sql_stmt INTO emp_rec USING emp_id;

--
mhm.




Marek Chmielewski - 30-03-2007 00:07

  mariaczi napisał(a):
> witam,
>
> mam taki kawałek kodu
>
> Kod: > declare
>  sql_query string(250);
>
> begin
>  sql_query := 'select * from skp where id_kh = :p_id_sp and anu =
> ''N''';
>  if(:data_od is not null) then
>    sql_query := sql_query || ' and dat_w < to_date(''' || :data_od ||
> ' 00:01'', ''YYYY-MM-DD HH24:MI'')';
>  end if;
>  sql_query := sql_query || ' order by id;';
>  dbms_output.put_line(to_char(sql_query));
>  for cur_skp in (SQL_QUERY);
>  loop
>  -- ciało loop'a
>  end loop;
> end;
> >
> jak wstawić sql_query w miejsce SQL_QUERY?
> "normalne wpisanie" nie działa :(
> chodzi mi o skonstruowanie zapytania w zależności od podania/nie
> podania parametrów a następnie wykonania go i "obrobienia odpowiedzi w
> pętli
>
> pzdr. i z góry podziękowania za pomoc

Raczej nie tędy droga.
Spróbuj coś takiego:

DECLARE
CURSOR c_sql_query(p_id_sp skp.id_kh%TYPE,
data_od skp.dat_w%TYPE) IS
SELECT *
FROM skp
WHERE id_kh < p_id_sp
AND anu = 'N'
AND ( dat_w < data_od
OR data_od IS NULL)
ORDER BY pla_id desc;
BEGIN
FOR r IN c_sql_query(:p_id_sp, :data_od) LOOP
-- ciało loop'a
END LOOP;
END;

--
___ _ _ ___ ___ ___
|__ |\ | | | |__ |__| ender [małpa] mch (kropka) one (kropka) pl
|__ | \| |__| |__ | \
My reply-adress is a spamtrap. Mój adres zwrotny jest pułapką. Nie pisz!




mariaczi - 30-03-2007 00:07

  On Thu, 29 Mar 2007 11:08:23 +0200, mhm <mhm@WYTNIJ_TO.si.pl> wrote:

>mam nadzieję, że o to biega...
>z FAQ oraclowego:
>
> -- Using bind variables...
> sql_stmt := 'INSERT INTO dept VALUES (:1, :2, :3)';
> EXECUTE IMMEDIATE sql_stmt USING dept_id, dept_name, location;
>
> -- Returning a cursor...
> sql_stmt := 'SELECT * FROM emp WHERE empno = :id';
> EXECUTE IMMEDIATE sql_stmt INTO emp_rec USING emp_id;
To widziałem; nie do końca o to.
Chodzi mi o poskładanie zapytania w zależności od tego czy parametr
został podany czy nie. Jesli parametr nie został podany to nie dokleja
do zapytania dodatkowego 'and', jesli został podany to dokleja 'and' z
pewną kosmetyką.





mariaczi - 30-03-2007 00:07

  On Thu, 29 Mar 2007 11:23:57 +0200, Marek Chmielewski
<pulapka_na_spam@op.pl> wrote:

>Raczej nie tędy droga.
>Spróbuj coś takiego:
>
>DECLARE
> CURSOR c_sql_query(p_id_sp skp.id_kh%TYPE,
> data_od skp.dat_w%TYPE) IS
> SELECT *
> FROM skp
> WHERE id_kh < p_id_sp
> AND anu = 'N'
> AND ( dat_w < data_od
> OR data_od IS NULL)
^^^^^^^^^^ mam na myśli że parametr nie został
podany, a nie sytuację, że pole jest puste
> ORDER BY pla_id desc;
>BEGIN
> FOR r IN c_sql_query(:p_id_sp, :data_od) LOOP
> -- ciało loop'a
> END LOOP;
>END;

być może źle analizuje problem... zaraz spróbuję za Twoją radą
pzdr.




=?ISO-8859-2?Q?Micha=B3?= Kuratczyk - 30-03-2007 00:07

  mariaczi wrote:
> Chodzi mi o poskładanie zapytania w zależności od tego czy parametr
> został podany czy nie. Jesli parametr nie został podany to nie dokleja
> do zapytania dodatkowego 'and', jesli został podany to dokleja 'and' z
> pewną kosmetyką.
http://asktom.oracle.com/pls/asktom/...:1288401763279

--
Michał Kuratczyk




mariaczi - 30-03-2007 00:07

  On Thu, 29 Mar 2007 11:23:57 +0200, Marek Chmielewski
<pulapka_na_spam@op.pl> wrote:

>Raczej nie tędy droga.
>Spróbuj coś takiego:
>
>DECLARE
> CURSOR c_sql_query(p_id_sp skp.id_kh%TYPE,
> data_od skp.dat_w%TYPE) IS
> SELECT *
> FROM skp
> WHERE id_kh < p_id_sp
> AND anu = 'N'
> AND ( dat_w < data_od
> OR data_od IS NULL)
> ORDER BY pla_id desc;
>BEGIN
> FOR r IN c_sql_query(:p_id_sp, :data_od) LOOP
> -- ciało loop'a
> END LOOP;
>END;
Dzięki wielkie, hula :)
pozdro.
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    Oracle, SQL, PL/SQL. Jak =?ISO-8859-2?Q?napisa=E6_zapytanie=2C?==?ISO-8859-2?Q?_kt=F3re_zwr=F3ci_nazw=EA_atrybutu=2C_kt=F3reg o?==?ISO-8859-2?Q?_warto=B6ci_spe=B3niaj=B1_zadany_warunek?= Oracle 19g +Insert +Insert +Insert... [oracle] zapytanie dynamiczne z =?ISO-8859-2?Q?=22dynamiczn=B1_?==?ISO-8859-2?Q?nazw=B1_tabeli=22?= [Oracle] jak =?ISO-8859-2?Q?ograniczy=E6_pami=EA=E6_dla_se?==?ISO-8859-2?Q?rwera=3F?= =?ISO-8859-2?Q?=5BOT=5D_Zdany_egzamin_Oracle_1Z0-007_a?==?ISO-8859-2?Q?_brak_informacji_na_stronie_Prometric_-_czy?==?ISO-8859-2?Q?_co=B6_nie_tak=3F?= [oracle] czy da =?ISO-8859-2?Q?si=EA_z_poziomu_procedury_?==?ISO-8859-2?Q?zrobi=E6_kopi=EA_zapasow=B1=3F?= [oracle 10g] czy =?ISO-8859-2?Q?mo=BFna_wy=B3=B1czy=E6_wszys?==?ISO-8859-2?Q?tkie_wi=EAzy_w_schemacie=3F?= MSSQL Express czy Oracle Express =?iso-8859-2?q?[oracle]_Jak_sprawdzi=E6_wielko=B6=E6_tabeli_=3F=3F?= =?ISO-8859-2?Q?Poszukjue_ksi=B1=BFki_"Oracle_?= =?ISO-8859-2?Q?optymalizacja_wydajno=B6ci"..?=
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • lubiatowo.xlx.pl
  • Cytat

    Decede mihi sole - nie zasłaniaj mi słonca.
    Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści
    Hoc fac - tak czyń.
    A tergo - od tyłu; z tyłu.
    I czarne włosy posiwieją. Safona

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com