Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

różnice składni poleceń i PLSQL z Oracle na MS SQL

535 views
Skip to first unread message

rgrzes

unread,
Oct 24, 2014, 10:11:47 AM10/24/14
to
Witam,
znam Oracle, MS SQL Server nie bardzo, mam coś napisać w MSSQL przez analogię, jak zrobić coś takiego (zwrócić cursor):

PROCEDURE P1(p_dt date, p_recSet out sys_refcursor) is
begin
open p_recSet for
select ....

exception
when others then begin
raise_application_error( -20000, 'Opis wlasny -' || SQLERRM(SQLCODE));
if (p_recSet%isOpen) then
close p_recSet;
end if;
end;
end;

PS: czy jest gdzieś może opisana składnia (jakaś ściąga :)) na zasadzie porównania przez analogię Oracle/MSSQL ?

pozdrawiam
Robert

Stokrotka

unread,
Oct 24, 2014, 10:50:11 AM10/24/14
to

>znam Oracle, MS SQL Server nie bardzo, mam coś napisać w MSSQL przez
>analogię, jak zrobić coś >takiego (zwrócić cursor):
Nie znam oracla, ale pszykałdowa defincja kursora (niesprawdzane) może być
np taka:

"DECLARE mojkursor CURSOR FOR
SELECT lp, data FROM POZYCJE

WHERE bc_id = @bc_id
ORDER BY typ_bc desc
OPEN mojkursor
FETCH NEXT FROM mojkursor INTO @my_lp, @my_data
WHILE (@@fetch_status <> -1)
BEGIN
UPDATE POZYCJE SET cos = @cos WHERE lp = @my_lp
SELECT @cos = @cos + 1
FETCH NEXT FROM mojkursor INTO @my_lp

END
DEALLOCATE mojkursor
"

--
http://ortografia.3-2-1.pl/ w zakładce 'inne' animacja dowód Tw Pitagorasa
bez mnożenia,
syntezator mowy Gdak i program dietetyczny Ananas.
(tekst bez: ó, ch, rz i -ii) Ortografia to NAWYK, często nielogiczny,
ktury ludzie ociężali umysłowo, nażucają bezmyślnie następnym pokoleniom.


wloochacz

unread,
Oct 24, 2014, 12:24:31 PM10/24/14
to
W dniu 2014-10-24 16:11, rgrzes pisze:
> Witam,
> znam Oracle, MS SQL Server nie bardzo, mam coś napisać w MSSQL przez analogię, jak zrobić coś takiego (zwrócić cursor):
W sensie - wypluć dane na zewnątrz z procedury?
To jest proste:
PROCEDURE P1(@p_dt date)
as
begin
select ....
from T
where T.p_dt = @p_dt;
end;

Odpalasz tę prockę i dostajesz dane, czyli tak:
exec p1 Getdate();

Ale jeśli chciałbyś te dane z procki połączyć z czymkolwiek (np. join z
inną tabelą) to wtedy musisz napisać UDFa (User Definied Functions),
czyli tak:

CREATE FUNCTION P1(@p_dt date)
RETURNS table
as
return (
select ....
from T
where T.p_dt = @p_dt;
)

i odpalasz to tak:
select * from p1(GetDate());

To jest najprostszy typ UDF, tzw. inline - i najszybszy. Ale mogą być
dowolnie fikuśne.

> PS: czy jest gdzieś może opisana składnia (jakaś ściąga :)) na zasadzie porównania przez analogię Oracle/MSSQL ?
Nie znam.

--
wloochacz

rgrzes

unread,
Oct 27, 2014, 3:26:27 AM10/27/14
to
dzięki za wskazówki, a czy da się kursor przekazać w parametrze typu output w procedurze a nie jako return funkcji ?

pozdrawiam
Robert

wloochacz

unread,
Oct 27, 2014, 3:34:20 AM10/27/14
to
W dniu 2014-10-27 08:26, rgrzes pisze:
/ciach/
> dzięki za wskazówki, a czy da się kursor przekazać w parametrze typu output w procedurze a nie jako return funkcji ?
Da się - google Ci zabrali?
http://technet.microsoft.com/en-us/library/ms175498%28v=sql.105%29.aspx
Ale zwróć uwagę na ograniczenia, a dokładnie na różny typy kursorów i
jak one będę wypluwane na zewnątrz.

--
wloochacz

wloochacz

unread,
Oct 27, 2014, 3:40:02 AM10/27/14
to
W dniu 2014-10-27 08:26, rgrzes pisze:
/ciach/
> dzięki za wskazówki, a czy da się kursor przekazać w parametrze typu output w procedurze a nie jako return funkcji ?
Aaa... jeszce jedno, po co Ci to w ogóle?

MSSQL to nie Oracle, a więc masz trochę szersze możliwości zwracania
danych do klienta, a nie tylko przez referencję na kursor...
No i nie jest to 100% odpowiednik z Oracle, a więc może nie przypasować ;-)

--
wloochacz
0 new messages