Oracle pl/sql problem
Elita - 27-07-2006 01:59
Oracle pl/sql problem
w procedurze na serwerze ORACLE mam taki fragment:
pWhere := 'WHERE idPrzesylki BETWEEN :pMin AND :pMax AND ' || pFiltr; pSql := 'SELECT COUNT(*) FROM tPrzesylki ' || pWhere;
EXECUTE IMMEDIATE pSql INTO pIlosc USING pMin,pMax;
gdzie pFiltr jest przekazywane z PHP i wygląda np tak : UPPER(adr_Nazwa1) LIKE 'BOB%' W php wywala mi błąd oraclowy: Ora_Exec failed (ORA-06502: PL/SQL: bł?d liczby lub warto?ci ORA-06512: przy "EPACZKI.MAXM", linia 49 ORA-06512: przy linia 1 -- while processing OCI function OEXEC/OEXN)
ale jeżeli robię tak (bez dodawania łańcucha <pFiltr>):
pWhere := 'WHERE idPrzesylki BETWEEN :pMin AND :pMax'; pSql := 'SELECT COUNT(*) FROM tPrzesylki ' || pWhere;
EXECUTE IMMEDIATE pSql INTO pIlosc USING pMin,pMax;
to działa dobrze. moje pytanie brzmi jak mam łańcuch <pFiltr> dołączyć do zmiennej <pWhere> żeby nie było błędu
Michał Kuratczyk - 27-07-2006 01:59
Elita wrote: > w procedurze na serwerze ORACLE mam taki fragment: > > pWhere := 'WHERE idPrzesylki BETWEEN :pMin AND :pMax AND ' || > pFiltr; > pSql := 'SELECT COUNT(*) FROM tPrzesylki ' || pWhere; > > EXECUTE IMMEDIATE pSql INTO pIlosc USING pMin,pMax; [..] > moje pytanie brzmi jak mam łańcuch <pFiltr> dołączyć do zmiennej <pWhere> > żeby nie było błędu
Generalnie robisz to dobrze, ale: - coś najwyraźniej jest nie tak z filtrem (może powinieneś użyć podwójnych apostrofów, czyli: LIKE ''FOOBAR%'') - jeżeli wklejasz do zapytania stringi pobrane od użytkownika bez walidowania ich, to... zmień to czym prędzej (hint: sql-injection). :->
-- Michał Kuratczyk
Elita - 27-07-2006 01:59
ale dupa ze mnie w php miałem: ora_bind($cursor,"pFiltr", ":pFiltr", 100, ORA_BIND_IN);
zmieniłem 100 na 255 i działa, sorry za zawracanie głowy
do poczytania dokumentacji skłoniła mnie odpowiedz Michała Kuratczyka, że niby wszystko mam dobrze w procedurze
jeszcze raz dzięki
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
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?=
jak to =?ISO-8859-2?Q?zrobi=E6=2E=2E=2E=3F_TSQL_sql_server?==?ISO-8859-2?Q?_?=
[oracle] czy da =?ISO-8859-2?Q?si=EA_z_poziomu_procedury_?==?ISO-8859-2?Q?zrobi=E6_kopi=EA_zapasow=B1=3F?=
[MSSQL2000] Problem z =?ISO-8859-2?Q?tabel=B1/indeksem/zapytanie?==?ISO-8859-2?Q?m_czy_b=B3=B1d_w_bazie_danych=2E=2E=2E?=
[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?=
zanotowane.pldoc.pisz.plpdf.pisz.plmisida.pev.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 |
|