/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
[Q] T-SQL til PL/SQL (mssql til oracle)
Fra : Peter Lykkegaard


Dato : 26-01-05 14:24

Hej

Jeg skal omskrive en lille ting fra T-SQL (mssql) til PL/SQL

if not exists (select foo from bar where foo = 1)
insert into bar (foo) values (1)

Any takers?

Jeg bruger instant client 10.1

Tia Peter

--
Hi! I'm a .signature *virus*! Copy me into your ~/.signature to help me
spread!



 
 
Peter Lykkegaard (26-01-2005)
Kommentar
Fra : Peter Lykkegaard


Dato : 26-01-05 16:48

"Peter Lykkegaard" wrote
>
> Jeg skal omskrive en lille ting fra T-SQL (mssql) til PL/SQL
>
> if not exists (select foo from bar where foo = 1)
> insert into bar (foo) values (1)
>

Jeg har noget ala

declare
tmp_count number(2);
begin
select count(foo) into tmp_count from bar where foo = 1;
if tmp_count = 0 then
insert into bar (foo) values (1);
commit;
end if;
end;

Men det virker ikke
Det vil sige jeg får ingen fejl men det bliver heller ikke sat nogen poster
ind

En alm
insert into bar (foo) values (1);

Virker fint

Og den her ting
select count(foo) into tmp_count from bar where foo = 1;

Giver 0


> Jeg bruger instant client 10.1
>
- Peter



Peter Lykkegaard (26-01-2005)
Kommentar
Fra : Peter Lykkegaard


Dato : 26-01-05 16:55

"Peter Lykkegaard"

>> Jeg skal omskrive en lille ting fra T-SQL (mssql) til PL/SQL
>>
>> if not exists (select foo from bar where foo = 1)
>> insert into bar (foo) values (1)
>>
>
Hmm jeg vil prøve noget a la denne i stedet
for x in ( select * from dual where NOT EXISTS ( select .... ) ) loop

insert ...
end loop;

- Peter



Peter Lykkegaard (26-01-2005)
Kommentar
Fra : Peter Lykkegaard


Dato : 26-01-05 20:10

"Peter Lykkegaard"

> Hmm jeg vil prøve noget a la denne i stedet
> for x in ( select * from dual where NOT EXISTS ( select .... ) ) loop
>
> insert ...
> end loop;
>
Nå ok

Det blev så denne her:

declare
x number:
for x in ( select * from dual where not exists (
select foo from bar where foo = 1) ) loop
insert into bar (foo) values (1)
end loop;

Den laver det jeg skal bruge

Men er det også den bedste implementering?

- Peter



Benny Nissen (26-01-2005)
Kommentar
Fra : Benny Nissen


Dato : 26-01-05 22:29

Peter Lykkegaard presented the following explanation :

> Den laver det jeg skal bruge

Det var da dejligt du fik løst dig problem med hjælp fra ... dig selv


--
Benny


Michael Hjorth (06-03-2005)
Kommentar
Fra : Michael Hjorth


Dato : 06-03-05 22:23

On Wed, 26 Jan 2005 14:24:10 +0100, Peter Lykkegaard wrote:

> Hej
>
> Jeg skal omskrive en lille ting fra T-SQL (mssql) til PL/SQL
>
> if not exists (select foo from bar where foo = 1)
> insert into bar (foo) values (1)
>

DECLARE
dum NUMBER
BEGIN
select foo
into dum
from bar
where foo = 1;
EXCEPTION
WHEN no_data_found THEN
insert into bar (foo) values (1);
END;


mvh
Michael.

Peter Lykkegaard (06-03-2005)
Kommentar
Fra : Peter Lykkegaard


Dato : 06-03-05 23:51

"Michael Hjorth" wrote
>
> DECLARE
> dum NUMBER
> BEGIN
> select foo
> into dum
> from bar
> where foo = 1;
> EXCEPTION
> WHEN no_data_found THEN
> insert into bar (foo) values (1);
> END;
>
Sjov konstruktion

Tak

- Peter



Michael Hjorth (08-03-2005)
Kommentar
Fra : Michael Hjorth


Dato : 08-03-05 23:17

On Sun, 06 Mar 2005 23:51:24 +0100, Peter Lykkegaard wrote:

> "Michael Hjorth" wrote
>>
>> DECLARE
>> dum NUMBER
Her burde jeg have skrevet:
dum bar.foo%TYPE;
>> BEGIN
>> select foo
>> into dum
>> from bar
>> where foo = 1;
>> EXCEPTION
>> WHEN no_data_found THEN
>> insert into bar (foo) values (1);
>> END;
>>
> Sjov konstruktion
>
Måske for en MS-SQL kodekarl, men utroligt normal for de af os som
har kodet Oracle i mange år. Især hvis du skal bruge resultatet af
select sætningen i den senere kode.

Michael.

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408924
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste