Toon posts:

[PL/SQL] Deel van script doet het als geen code erna komt.

Pagina: 1
Acties:
  • 43 views sinds 30-01-2008

Verwijderd

Topicstarter
Hallo,

Ik heb hier een pl/sql code. Deze code geeft een fout op de regel waar ik de tweede select statement gebruik. Dus na "execute immdiate str;".
De foutmelding die hij geeft zegt dat hij de view niet kan vinden.
Dit klopt omdat hij deze niet heeft aangemaakt.
Als ik alles weg gooi vanaf de "execute immdiate str;". Maakt hij wel de view aan.
Hij werkt dus alleen als ik geen code erachter schrijf.
Hoe kan ik dit oplossen. Hier is mijn code :

[/quote]
declare
str varchar2(200);
str2 varchar2(200);
imagewaarde varchar2(200);
waarde1 number(5,2);
waarde2 number(5,2);
waarde3 number(5,2);
waarde4 number(5,2);
waarde5 number(5,2);
waarde6 number(5,2);
waarde7 number(5,2);
waarde8 number(5,2);
waarde9 number(5,2);
waarde10 number(5,2);
waarde11 number(5,2);
waarde12 number(5,2);
waarde13 number(5,2);
waarde14 number(5,2);
l_int integer default 1;
begin
select image into imagewaarde from oracleragijog_2 where map_id = l_int;
str := 'create or replace view ordinates as ';
str := str||'select rownum rnum,t.* from the ';
str := str||'(select o.geom.sdo_ordinates from oracleragijog_2 o ';
str := str||'where o.map_id = '||l_int||') t';
execute immediate str;
select column_value into waarde1 from ordinates where rnum = 1;
select column_value into waarde2 from ordinates where rnum = 2;
select column_value into waarde3 from ordinates where rnum = 3;
select column_value into waarde4 from ordinates where rnum = 4;
select column_value into waarde5 from ordinates where rnum = 5;
select column_value into waarde6 from ordinates where rnum = 6;
select column_value into waarde7 from ordinates where rnum = 7;
select column_value into waarde8 from ordinates where rnum = 8;
select column_value into waarde9 from ordinates where rnum = 9;
select column_value into waarde10 from ordinates where rnum = 10;
select column_value into waarde11 from ordinates where rnum = 11;
select column_value into waarde12 from ordinates where rnum = 12;
select column_value into waarde13 from ordinates where rnum = 13;
select column_value into waarde14 from ordinates where rnum = 14;
str2 := 'create table temp_xy(image varchar2(50 byte),xwaarde float(126),';
str2 := str2||'ywaarde float(126)';
execute immediate str2;
UPDATE spatial.temp_xy set image = imagewaarde, xwaarde = waarde1, ywaarde = waarde2;
UPDATE spatial.temp_xy set image = imagewaarde, xwaarde = waarde3, ywaarde = waarde4;
UPDATE spatial.temp_xy set image = imagewaarde, xwaarde = waarde5, ywaarde = waarde6;
UPDATE spatial.temp_xy set image = imagewaarde, xwaarde = waarde7, ywaarde = waarde8;
UPDATE spatial.temp_xy set image = imagewaarde, xwaarde = waarde8, ywaarde = warde10;
UPDATE spatial.temp_xy set image = imagewaarde, xwaarde = waarde11, ywaarde = waarde12;
UPDATE spatial.temp_xy set image = imagewaarde, xwaarde = waarde13, ywaarde = waarde14;
end;

[quote]

  • mkleinman
  • Registratie: Oktober 2001
  • Laatst online: 22:12

mkleinman

8kWp, WPB, ELGA 6

Zet voor de grap eens een COMMIT meteen na de execute immediate.

De execute immidiate wordt ( uit mijn hoofd ) uitgevoerd in een seperate sessie waardoor je huidige code executie geen notie heeft dat die view aangemaakt is.

Overigens zou ik proberen om dit soort execute immediate statements te voorkomen. Wanneer je on the fly tabellen en views gaat creeren met execute immediate en deze later gaat gebruiken in je code heb je grote kans dat je package/procedure/functie invalid wordt en niet meer werkt.

( heb nogal wat ervaring met EXECUTE IMMEDIATE statements :P )

[ Voor 44% gewijzigd door mkleinman op 13-01-2005 14:32 ]

Duurzame nerd. Veel comfort en weinig verbruiken. Zuinig aan doen voor de toekomst.


  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Het zou me verbazen als dit sowieso wat doet.
Wat is de bedoeling van 'the' in je eerste create statement?
En wat is een 'varchar2(50 byte)'?

Who is John Galt?


Verwijderd

Topicstarter
Tot zover is mijn script nog niet gekomen.
Maar dat is een varchar met 50 tekens.
En als dat het niet doet dan maak ik er varchar(50) van.
Dit is nog maar het begin van een veel grotere script en ben er
maar nog net mee begonnen. Tussendoor testen van scripten werkt erg fijn.

Verwijderd

Topicstarter
Met een commit na de execute immidiate werkt ook niet.
Ik heb dit stukje script(create view) waar hij nu op fout loopt al een keer gebruikt maar toen werkte hij gewoon.

Verwijderd

Topicstarter
Ik heb mijn script ff geupdated.
Maar ik heb nog steeds de fout melding na execute immediate str en str2;
Op een of andere manier doet hij hier niets als hij de execute immediate ziet..
Weet iemand waar aan dit ligt.

[/quote]

declare
str varchar2(200);
str2 varchar2(200);
imagewaarde varchar2(200);
waarde1 number(5,2);
waarde2 number(5,2);
waarde3 number(5,2);
waarde4 number(5,2);
waarde5 number(5,2);
waarde6 number(5,2);
waarde7 number(5,2);
waarde8 number(5,2);
waarde9 number(5,2);
waarde10 number(5,2);
waarde11 number(5,2);
waarde12 number(5,2);
waarde13 number(5,2);
waarde14 number(5,2);
l_int integer default 1;
begin
str := 'create or replace view ordinates as ';
str := str||'select rownum rnum,t.* from the ';
str := str||'(select o.geom.sdo_ordinates from oracleragijog_2 o ';
str := str||'where o.map_id = '||l_int||') t';
execute immediate str;
str2 := 'create table spatial.temp_xy(image varchar2(50 byte),xwaarde float(126),ywaarde float(126))';
execute immediate str2;
select image into imagewaarde from oracleragijog_2 where map_id = l_int;
select column_value into waarde1 from ordinates where rnum = 1;
select column_value into waarde2 from ordinates where rnum = 2;
select column_value into waarde3 from ordinates where rnum = 3;
select column_value into waarde4 from ordinates where rnum = 4;
select column_value into waarde5 from ordinates where rnum = 5;
select column_value into waarde6 from ordinates where rnum = 6;
select column_value into waarde7 from ordinates where rnum = 7;
select column_value into waarde8 from ordinates where rnum = 8;
select column_value into waarde9 from ordinates where rnum = 9;
select column_value into waarde10 from ordinates where rnum = 10;
insert into spatial.temp_xy values (imagewaarde, waarde1, waarde2);
insert into spatial.temp_xy values (imagewaarde, waarde3, waarde4);
insert into spatial.temp_xy values (imagewaarde, waarde5, waarde6);
insert into spatial.temp_xy values (imagewaarde, waarde7, waarde8);
insert into spatial.temp_xy values (imagewaarde, waarde9, waarde10);
end;

[quote]

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Nog steeds hetzelfde als net, het sql wat je aan execute immediate voert is onjuist.

Who is John Galt?


Verwijderd

Topicstarter
Wat jij zegt is niet juist.
De inhoud van de str variable klopt want als ik dit uitvoer dan doet hij het gewoon.
Alleen als achter execute immediate een code zet werkt het niet.
Ik ben eigelijk ook op zoek naar iemand die kan zeggen waaraan het ligt en wat de oplossing
is zodat ik de view in mijn script kan maken.
Niet naar iemand zegt dat de code fout is omdat het niet werkt.

[/quote]

declare
str varchar2(200);
begin
str := 'create or replace view ordinates as ';
str := str||'select rownum rnum,t.* from the ';
str := str||'(select o.geom.sdo_ordinates from oracleragijog_2 o ';
str := str||'where o.map_id = '||l_int||') t';
execute immediate str;
str2 := 'create table spatial.temp_xy(image varchar2(50 byte),xwaarde float(126),ywaarde float(126))';
execute immediate str2;
end;

[quote]

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 22:18

Creepy

Tactical Espionage Splatterer

Tasker: je plaatste 3 posts achter elkaar. Wil je hier in het vervolge de EDIT knop voor gebruiken?

Daarnaast: lees P&W FAQ - Leer **** debuggen!! eens door AUB, Als ik zo 123 naar je query kijk in str, dan klopt je query niet. Wat daar niet aan klopt kan je vrij makkelijk zelf uitvinden. * Creepy gokt op een "from the" waarna je een extra select plaatst.

Als je zelf aan het debuggen gaat dan ga je je eigen probleem echt wel oplossen.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney

Pagina: 1

Dit topic is gesloten.