<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
 xmlns:dc="http://purl.org/dc/elements/1.1/"
 xmlns:content="http://purl.org/rss/1.0/modules/content/"
 xmlns:atom="http://www.w3.org/2005/Atom"
>
	<channel>
		<copyright>Copyright 1998 - 2026 DPG Media B.V.</copyright>
		<pubDate>Tue, 10 Nov 2026 19:28:35 GMT</pubDate>
		<lastBuildDate>Tue, 10 Nov 2026 19:28:35 GMT</lastBuildDate>
		<description>GoT - list_messages</description>
		<image>
			<link>https://gathering.tweakers.net/</link>
			<title>Gathering of Tweakers</title>
			<url>https://tweakers.net/icon-192.png</url>
		</image>
		<language>nl-nl</language>
		<link>https://gathering.tweakers.net/rss/list_messages/1482083</link>
		<atom:link href="https://gathering.tweakers.net/rss/list_messages/1482083" rel="self" type="application/rss+xml" />
		<title>[Unix/SQLPlus] Script parallel draaien - Softwareontwikkeling - GoT</title>
		<webMaster>gathering@tweakers.net (Administrator)</webMaster>
		<item>
			<title>BtM909</title>
			<link>https://gathering.tweakers.net/forum/list_message/37268188#37268188</link>
			<description>xs4reus, ik hoop dat je nog even gaat reageren, maar was het probleem primair het aanroepen van je SP&#039;s en SQL statements of de statements zelf?</description>
			<content:encoded><![CDATA[xs4reus, ik hoop dat je nog even gaat reageren, maar was het probleem primair het aanroepen van je SP&#039;s en SQL statements of de statements zelf?]]></content:encoded>
			<dc:creator>BtM909</dc:creator>
			<guid isPermaLink="false">https://gathering.tweakers.net/forum/list_message/37268188#37268188</guid>
			<pubDate>Tue, 06 Dec 2011 09:32:06 GMT</pubDate>
		</item>
		<item>
			<title>Verwijderd</title>
			<link>https://gathering.tweakers.net/forum/list_message/37238231#37238231</link>
			<description>Het is me gelukt!

Ik gebruik nu een sequence voor het genereren van de id, gaat prima!

En ook het parallel opstarten middels een loop doet nu wat ik er van hoopte.

Bedankt voor jullie input!</description>
			<content:encoded><![CDATA[Het is me gelukt!<br>
<br>
Ik gebruik nu een sequence voor het genereren van de id, gaat prima!<br>
<br>
En ook het parallel opstarten middels een loop doet nu wat ik er van hoopte.<br>
<br>
Bedankt voor jullie input!]]></content:encoded>
			<dc:creator>Verwijderd</dc:creator>
			<guid isPermaLink="false">https://gathering.tweakers.net/forum/list_message/37238231#37238231</guid>
			<pubDate>Thu, 01 Dec 2011 11:58:14 GMT</pubDate>
		</item>
		<item>
			<title>JaQ</title>
			<link>https://gathering.tweakers.net/forum/list_message/37220310#37220310</link>
			<description>Verwijderd schreef op maandag 28 november 2011 @ 23:56:
Code in mijn eerste post is slechts een voorbeeld. In werkelijkheid heten de procedures anders (en idd geen insert haha) en gaat het om meer code die parallel moet worden gedraaid, maar ik wilde t voorbeeld simpel houden.dbms_job of dbms_scheduler is de gebruikelijk route om pl/sql code paralleliseren (procedure meerde malen aanroepen). Als je gaat updaten is DBMS_PARALLEL_EXECUTE een 11R2 feature die je kan helpen (maar let op, pas vanaf 11R2).

Mocht je het perse op unix willen, dan zou zoiets als dit werken:

run.sql:
code:1
  execute doubler(pp_interations =&gt; 10);

run.sh:
code:1
2
3
4
5
6
7
8
9
10
#!/bin/bash
#
export ORACLE_SID=$naam_van_je_database
ORAENV_ASK=NO
source /usr/local/bin/oraenv
ORAENV_ASK=YES

sqlplus username/password @run.sql &amp;
sqlplus username/password @run.sql &amp;
sqlplus username/password @run.sql &amp;

Niet erg fraai, maar het werkt wel (denk ik). Persoonlijk ben ik nooit zo&#039;n voorstander van allerlei dingen op het OS schedulen. Je krijgt dan namelijk teveel afhankelijkheden: en cron, en dbms_job / dbms_scheduler, eventueel nog een enterprise scheduler (EM of die HP meuk of zo). Beetje onoverzichtelijk. 

Je lokale DBA zou je in ieder geval moeten kunnen helpen met het unix werk.Ravefiend schreef op dinsdag 29 november 2011 @ 00:11:
Let op dat je sequence geen default cache mee krijgt want dan loop je nog het risico op gaps. Lees dit er ook even op na:

http://docs.oracle.com/cd...r.111/b28310/views002.htmTheoretisch klopt dat. In de praktijk valt dat erg mee. Sterker nog, door een dik cache aan de sequence te knopen haal je flink hogere performance  (scheelt weer een drukke latch). 

Overigens mag je nooit op een sequence vertrouwen als je doorlopende nummering wilt. Je kan namelijk vanuit een andere (willekeurige) sessie de sequence aanroepen (maar niet inserten) en zoals je ongetwijfeld weet kan je een sequence nummer maar 1 keer uitdelen. Sommige auditors vereisen een doorlopende nummering. Wat ze eigenlijk eisen is een verklaring waarom er gaps zijn. Dat kan je ook op andere manieren oplossen. (bijvoorbeeld achteraf het &quot;logische nummer&quot; dat de auditor gebruikt toekennen, of door auditing op de sequence te zetten waardoor je weet welke user de sequence ophoogt).</description>
			<content:encoded><![CDATA[<blockquote><div class="message-quote-div"><b><a href="https://gathering.tweakers.net/forum/list_message/37219916#37219916" rel="external" class="messagelink">Verwijderd schreef op maandag 28 november 2011 @ 23:56</a>:</b><br>
Code in mijn eerste post is slechts een voorbeeld. In werkelijkheid heten de procedures anders (en idd geen insert haha) en gaat het om meer code die parallel moet worden gedraaid, maar ik wilde t voorbeeld simpel houden.</div></blockquote>dbms_job of dbms_scheduler is de gebruikelijk route om pl/sql code paralleliseren (procedure meerde malen aanroepen). Als je gaat updaten is DBMS_PARALLEL_EXECUTE een 11R2 feature die je kan helpen (maar let op, pas vanaf 11R2).<br>
<br>
Mocht je het perse op unix willen, dan zou zoiets als dit werken:<br>
<br>
run.sql:<br>
<div class="code">code:<br><table class="phphighlight"><tr><td class="phphighlightline"><pre>1
</pre></td><td class="phphighlightcode"><div><pre>  execute doubler(pp_interations =&gt; 10);</pre></div></td></tr></table></div><br>
<br>
run.sh:<br>
<div class="code">code:<br><table class="phphighlight"><tr><td class="phphighlightline"><pre>1
2
3
4
5
6
7
8
9
10
</pre></td><td class="phphighlightcode"><div><pre>#!/bin/bash
#
export ORACLE_SID=$naam_van_je_database
ORAENV_ASK=NO
source /usr/local/bin/oraenv
ORAENV_ASK=YES

sqlplus username/password @run.sql &amp;
sqlplus username/password @run.sql &amp;
sqlplus username/password @run.sql &amp;</pre></div></td></tr></table></div><br>
<br>
Niet erg fraai, maar het werkt wel (denk ik). Persoonlijk ben ik nooit zo&#039;n voorstander van allerlei dingen op het OS schedulen. Je krijgt dan namelijk teveel afhankelijkheden: en cron, en dbms_job / dbms_scheduler, eventueel nog een enterprise scheduler (EM of die HP meuk of zo). Beetje onoverzichtelijk. <br>
<br>
Je lokale DBA zou je in ieder geval moeten kunnen helpen met het unix werk.<blockquote><div class="message-quote-div"><b><a href="https://gathering.tweakers.net/forum/list_message/37219969#37219969" rel="external" class="messagelink">Ravefiend schreef op dinsdag 29 november 2011 @ 00:11</a>:</b><br>
Let op dat je sequence geen default cache mee krijgt want dan loop je nog het risico op gaps. Lees dit er ook even op na:<br>
<br>
<a href="http://docs.oracle.com/cd/B28359_01/server.111/b28310/views002.htm" rel="external nofollow" title="http://docs.oracle.com/cd/B28359_01/server.111/b28310/views002.htm">http://docs.oracle.com/cd...r.111/b28310/views002.htm</a></div></blockquote>Theoretisch klopt dat. In de praktijk valt dat erg mee. Sterker nog, door een dik cache aan de sequence te knopen haal je flink hogere performance <img src="https://tweakers.net/g/s/wink.svg" width="16" height="16" alt=";)"> (scheelt weer een drukke latch). <br>
<br>
Overigens mag je nooit op een sequence vertrouwen als je doorlopende nummering wilt. Je kan namelijk vanuit een andere (willekeurige) sessie de sequence aanroepen (maar niet inserten) en zoals je ongetwijfeld weet kan je een sequence nummer maar 1 keer uitdelen. Sommige auditors vereisen een doorlopende nummering. Wat ze eigenlijk eisen is een verklaring waarom er gaps zijn. Dat kan je ook op andere manieren oplossen. (bijvoorbeeld achteraf het &quot;logische nummer&quot; dat de auditor gebruikt toekennen, of door auditing op de sequence te zetten waardoor je weet welke user de sequence ophoogt).]]></content:encoded>
			<dc:creator>JaQ</dc:creator>
			<guid isPermaLink="false">https://gathering.tweakers.net/forum/list_message/37220310#37220310</guid>
			<pubDate>Tue, 29 Nov 2011 06:52:01 GMT</pubDate>
		</item>
		<item>
			<title>Verwijderd</title>
			<link>https://gathering.tweakers.net/forum/list_message/37219977#37219977</link>
			<description>Ravefiend schreef op dinsdag 29 november 2011 @ 00:11:
Let op dat je sequence geen default cache mee krijgt want dan loop je nog het risico op gaps. Lees dit er ook even op na:

http://docs.oracle.com/cd...r.111/b28310/views002.htmdank je wel voor de tip!</description>
			<content:encoded><![CDATA[<blockquote><div class="message-quote-div"><b><a href="https://gathering.tweakers.net/forum/list_message/37219969#37219969" rel="external" class="messagelink">Ravefiend schreef op dinsdag 29 november 2011 @ 00:11</a>:</b><br>
Let op dat je sequence geen default cache mee krijgt want dan loop je nog het risico op gaps. Lees dit er ook even op na:<br>
<br>
<a href="http://docs.oracle.com/cd/B28359_01/server.111/b28310/views002.htm" rel="external nofollow" title="http://docs.oracle.com/cd/B28359_01/server.111/b28310/views002.htm">http://docs.oracle.com/cd...r.111/b28310/views002.htm</a></div></blockquote>dank je wel voor de tip!]]></content:encoded>
			<dc:creator>Verwijderd</dc:creator>
			<guid isPermaLink="false">https://gathering.tweakers.net/forum/list_message/37219977#37219977</guid>
			<pubDate>Mon, 28 Nov 2011 23:13:34 GMT</pubDate>
		</item>
		<item>
			<title>Ravefiend</title>
			<link>https://gathering.tweakers.net/forum/list_message/37219969#37219969</link>
			<description>Let op dat je sequence geen default cache mee krijgt want dan loop je nog het risico op gaps. Lees dit er ook even op na:

http://docs.oracle.com/cd...r.111/b28310/views002.htm</description>
			<content:encoded><![CDATA[Let op dat je sequence geen default cache mee krijgt want dan loop je nog het risico op gaps. Lees dit er ook even op na:<br>
<br>
<a href="http://docs.oracle.com/cd/B28359_01/server.111/b28310/views002.htm" rel="external nofollow" title="http://docs.oracle.com/cd/B28359_01/server.111/b28310/views002.htm">http://docs.oracle.com/cd...r.111/b28310/views002.htm</a>]]></content:encoded>
			<dc:creator>Ravefiend</dc:creator>
			<guid isPermaLink="false">https://gathering.tweakers.net/forum/list_message/37219969#37219969</guid>
			<pubDate>Mon, 28 Nov 2011 23:11:50 GMT</pubDate>
		</item>
		<item>
			<title>Verwijderd</title>
			<link>https://gathering.tweakers.net/forum/list_message/37219964#37219964</link>
			<description>nielsl schreef op maandag 28 november 2011 @ 19:18:
[...]


Voor wat betreft de uniqueness van je IDs, dat los je, afhankelijk van je database engine, op met keys. In MySQL is dat bijvoorbeeld een primary met auto increment. Daarnaast de vraag waarom je het script parallel wilt laten draaien? iets gaat je bottleneck zijn (ik gok disk, maargoed, ik weet niet op wat voor hardware je draait), die bottleneck haal je toch wel, of je dan scripts parallel draait, of gewoon 1 sequentieel script met een loop van 4 miljoen iteraties? Ik zou niet moeilijk doen en gewoon 4 miljoen opgeven. Multi core usage wordt als het goed is &quot;afgedwongen&quot; door je DBMSHey,

Het script is in het echt wat ingewikkelder dan ik laat zien in de code. In werkelijkheid genereer ik 100.000 blobs welke elk uit 6 miljoen inserts bestaan die weer geselecteerd worden uit een aantal andere tabellen. Het script gaat draaien in een rekencentrum, geen idee wat voor hardware ze daar precies hebben, maar in elk geval zou dat niet 123 de bottleneck mogen zijn.</description>
			<content:encoded><![CDATA[<blockquote><div class="message-quote-div"><b><a href="https://gathering.tweakers.net/forum/list_message/37218401#37218401" rel="external" class="messagelink">nielsl schreef op maandag 28 november 2011 @ 19:18</a>:</b><br>
[...]<br>
<br>
<br>
Voor wat betreft de uniqueness van je IDs, dat los je, afhankelijk van je database engine, op met keys. In MySQL is dat bijvoorbeeld een primary met auto increment. Daarnaast de vraag waarom je het script parallel wilt laten draaien? iets gaat je bottleneck zijn (ik gok disk, maargoed, ik weet niet op wat voor hardware je draait), die bottleneck haal je toch wel, of je dan scripts parallel draait, of gewoon 1 sequentieel script met een loop van 4 miljoen iteraties? Ik zou niet moeilijk doen en gewoon 4 miljoen opgeven. Multi core usage wordt als het goed is &quot;afgedwongen&quot; door je DBMS</div></blockquote>Hey,<br>
<br>
Het script is in het echt wat ingewikkelder dan ik laat zien in de code. In werkelijkheid genereer ik 100.000 blobs welke elk uit 6 miljoen inserts bestaan die weer geselecteerd worden uit een aantal andere tabellen. Het script gaat draaien in een rekencentrum, geen idee wat voor hardware ze daar precies hebben, maar in elk geval zou dat niet 123 de bottleneck mogen zijn.]]></content:encoded>
			<dc:creator>Verwijderd</dc:creator>
			<guid isPermaLink="false">https://gathering.tweakers.net/forum/list_message/37219964#37219964</guid>
			<pubDate>Mon, 28 Nov 2011 23:11:24 GMT</pubDate>
		</item>
		<item>
			<title>Verwijderd</title>
			<link>https://gathering.tweakers.net/forum/list_message/37219916#37219916</link>
			<description>JaQ schreef op maandag 28 november 2011 @ 22:38:
[...]

Maar dit is Oracle (gezien het sqlplus), dus de primary key kent geen auto increment. De TS moet dan een sequence aanmaken om een autonummer uit te delen. 

code:1
create sequence test_table_seq start with 1 maxvalue unlimited nocycle;

Een mogelijke oplossing is een trigger op de tabel te zetten die de primary key vult met de sequence 

code:1
2
3
4
5
6
7
create trigger test_table_bir before insert on test_table for each row
declare

begin
  :new.id := test_table_seq.nextval;
end;
/

Als je een oudere database dan 11R2 gebruikt mag je een sequence niet rechtstreeks aan een variabele toewijzen, dan moet je trigger er ongeveer zo uit zien:
code:1
2
3
4
5
6
7
8
9
create trigger test_table_bir before insert on test_table for each row
declare

begin
  select test_table_seq.nextval
    into :new.id
    from dual;
end;
/


en vervolgens de tabel vullen met
code:1
insert into test_table(sample) values (1234)

en daarna je pl/sql code:
code:1
2
3
4
5
6
7
8
9
10
create procedure doubler(pp_interations number)
as
  lv_counter pls_integer := 0;
begin 
  while (  lv_counter &lt; pp_interations )
  loop
    insert into test_table(sample) ( select sample from test_table)
  end loop;
end;
/
Stuk minder iteraties nodig. Performance is nog steeds ruk (net zoals de initiële testcase), het gaat wel werken binnen afzienbare tijd. Bottleneck uiteindelijk zal I/O zijn..

Ow, code is uiteraard ongetest.

Ow2, het is uiteraard bad practice om je procedure als naam een reserved word (zoals insert) te geven, sterker nog: ik gok zomaar dat Oracle dat niet pikt Thanks voor je reactie. 

Het gaat idd om een oracle Database. Trigger is een goed idee, had ik niet aan gedacht. 

Code in mijn eerste post is slechts een voorbeeld. In werkelijkheid heten de procedures anders (en idd geen insert haha) en gaat het om meer code die parallel moet worden gedraaid, maar ik wilde t voorbeeld simpel houden. 

Nu nog zien dat ik t parallel krijg :-)</description>
			<content:encoded><![CDATA[<blockquote><div class="message-quote-div"><b><a href="https://gathering.tweakers.net/forum/list_message/37219540#37219540" rel="external" class="messagelink">JaQ schreef op maandag 28 november 2011 @ 22:38</a>:</b><br>
[...]<br>
<br>
Maar dit is Oracle (gezien het sqlplus), dus de primary key kent geen auto increment. De TS moet dan een sequence aanmaken om een autonummer uit te delen. <br>
<br>
<div class="code">code:<br><table class="phphighlight"><tr><td class="phphighlightline"><pre>1
</pre></td><td class="phphighlightcode"><div><pre>create sequence test_table_seq start with 1 maxvalue unlimited nocycle;</pre></div></td></tr></table></div><br>
<br>
Een mogelijke oplossing is een trigger op de tabel te zetten die de primary key vult met de sequence <br>
<br>
<div class="code">code:<br><table class="phphighlight"><tr><td class="phphighlightline"><pre>1
2
3
4
5
6
7
</pre></td><td class="phphighlightcode"><div><pre>create trigger test_table_bir before insert on test_table for each row
declare

begin
  :new.id := test_table_seq.nextval;
end;
/</pre></div></td></tr></table></div><br>
<br>
Als je een oudere database dan 11R2 gebruikt mag je een sequence niet rechtstreeks aan een variabele toewijzen, dan moet je trigger er ongeveer zo uit zien:<br>
<div class="code">code:<br><table class="phphighlight"><tr><td class="phphighlightline"><pre>1
2
3
4
5
6
7
8
9
</pre></td><td class="phphighlightcode"><div><pre>create trigger test_table_bir before insert on test_table for each row
declare

begin
  select test_table_seq.nextval
    into :new.id
    from dual;
end;
/</pre></div></td></tr></table></div><br>
<br>
<br>
en vervolgens de tabel vullen met<br>
<div class="code">code:<br><table class="phphighlight"><tr><td class="phphighlightline"><pre>1
</pre></td><td class="phphighlightcode"><div><pre>insert into test_table(sample) values (1234)</pre></div></td></tr></table></div><br>
<br>
en daarna je pl/sql code:<br>
<div class="code">code:<br><table class="phphighlight"><tr><td class="phphighlightline"><pre>1
2
3
4
5
6
7
8
9
10
</pre></td><td class="phphighlightcode"><div><pre>create procedure doubler(pp_interations number)
as
  lv_counter pls_integer := 0;
begin 
  while (  lv_counter &lt; pp_interations )
  loop
    insert into test_table(sample) ( select sample from test_table)
  end loop;
end;
/</pre></div></td></tr></table></div><br>
Stuk minder iteraties nodig. Performance is nog steeds ruk (net zoals de initiële testcase), het gaat wel werken binnen afzienbare tijd. Bottleneck uiteindelijk zal I/O zijn..<br>
<br>
Ow, code is uiteraard ongetest.<br>
<br>
Ow2, het is uiteraard bad practice om je procedure als naam een reserved word (zoals insert) te geven, sterker nog: ik gok zomaar dat Oracle dat niet pikt <img src="https://tweakers.net/g/s/wink.svg" width="16" height="16" alt=";)"></div></blockquote>Thanks voor je reactie. <br>
<br>
Het gaat idd om een oracle Database. Trigger is een goed idee, had ik niet aan gedacht. <br>
<br>
Code in mijn eerste post is slechts een voorbeeld. In werkelijkheid heten de procedures anders (en idd geen insert haha) en gaat het om meer code die parallel moet worden gedraaid, maar ik wilde t voorbeeld simpel houden. <br>
<br>
Nu nog zien dat ik t parallel krijg :-)]]></content:encoded>
			<dc:creator>Verwijderd</dc:creator>
			<guid isPermaLink="false">https://gathering.tweakers.net/forum/list_message/37219916#37219916</guid>
			<pubDate>Mon, 28 Nov 2011 22:56:44 GMT</pubDate>
		</item>
		<item>
			<title>JaQ</title>
			<link>https://gathering.tweakers.net/forum/list_message/37219540#37219540</link>
			<description>nielsl schreef op maandag 28 november 2011 @ 19:18:
Voor wat betreft de uniqueness van je IDs, dat los je, afhankelijk van je database engine, op met keys. In MySQL is dat bijvoorbeeld een primary met auto increment.Maar dit is Oracle (gezien het sqlplus), dus de primary key kent geen auto increment. De TS moet dan een sequence aanmaken om een autonummer uit te delen. 

SQL:1
create sequence test_table_seq start with 1 maxvalue unlimited nocycle;

Een mogelijke oplossing is een trigger op de tabel te zetten die de primary key vult met de sequence 

SQL:1
2
3
4
5
6
7
create trigger test_table_bir before insert on test_table for each row
declare

begin
  :new.id := test_table_seq.nextval;
end;
/

Als je een oudere database dan 11R2 gebruikt mag je een sequence niet rechtstreeks aan een variabele toewijzen, dan moet je trigger er ongeveer zo uit zien:
SQL:1
2
3
4
5
6
7
8
9
create trigger test_table_bir before insert on test_table for each row
declare

begin
  select test_table_seq.nextval
    into :new.id
    from dual;
end;
/


en vervolgens de tabel vullen met
SQL:1
insert into test_table(sample) values (1234)

en daarna je pl/sql code:
SQL:1
2
3
4
5
6
7
8
9
10
create procedure doubler(pp_interations number)
as
  lv_counter pls_integer := 0;
begin 
  while (  lv_counter &lt; pp_interations )
  loop
    insert into test_table(sample) ( select sample from test_table)
  end loop;
end;
/
Stuk minder iteraties nodig. Performance is nog steeds ruk (net zoals de initiële testcase), het gaat wel werken binnen afzienbare tijd. Bottleneck uiteindelijk zal I/O zijn..

Ow, code is uiteraard ongetest.

Ow2, het is uiteraard bad practice om je procedure als naam een reserved word (zoals insert) te geven, sterker nog: ik gok zomaar dat Oracle dat niet pikt </description>
			<content:encoded><![CDATA[<blockquote><div class="message-quote-div"><b><a href="https://gathering.tweakers.net/forum/list_message/37218401#37218401" rel="external" class="messagelink">nielsl schreef op maandag 28 november 2011 @ 19:18</a>:</b><br>
Voor wat betreft de uniqueness van je IDs, dat los je, afhankelijk van je database engine, op met keys. In MySQL is dat bijvoorbeeld een primary met auto increment.</div></blockquote>Maar dit is Oracle (gezien het sqlplus), dus de primary key kent geen auto increment. De TS moet dan een sequence aanmaken om een autonummer uit te delen. <br>
<br>
<div class="code">SQL:<br><table class="phphighlight"><tr><td class="phphighlightline"><pre>1
</pre></td><td class="phphighlightcode"><div><pre><span class="code_k">create</span><span class="code_w"> </span><span class="code_n">sequence</span><span class="code_w"> </span><span class="code_n">test_table_seq</span><span class="code_w"> </span><span class="code_k">start</span><span class="code_w"> </span><span class="code_k">with</span><span class="code_w"> </span><span class="code_mi">1</span><span class="code_w"> </span><span class="code_k">maxvalue</span><span class="code_w"> </span><span class="code_n">unlimited</span><span class="code_w"> </span><span class="code_n">nocycle</span><span class="code_p">;</span></pre></div></td></tr></table></div><br>
<br>
Een mogelijke oplossing is een trigger op de tabel te zetten die de primary key vult met de sequence <br>
<br>
<div class="code">SQL:<br><table class="phphighlight"><tr><td class="phphighlightline"><pre>1
2
3
4
5
6
7
</pre></td><td class="phphighlightcode"><div><pre><span class="code_k">create</span><span class="code_w"> </span><span class="code_k">trigger</span><span class="code_w"> </span><span class="code_n">test_table_bir</span><span class="code_w"> </span><span class="code_k">before</span><span class="code_w"> </span><span class="code_k">insert</span><span class="code_w"> </span><span class="code_k">on</span><span class="code_w"> </span><span class="code_n">test_table</span><span class="code_w"> </span><span class="code_k">for</span><span class="code_w"> </span><span class="code_k">each</span><span class="code_w"> </span><span class="code_k">row</span>
<span class="code_k">declare</span>

<span class="code_k">begin</span>
<span class="code_w">  </span><span class="code_p">:</span><span class="code_k">new</span><span class="code_p">.</span><span class="code_n">id</span><span class="code_w"> </span><span class="code_p">:</span><span class="code_o">=</span><span class="code_w"> </span><span class="code_n">test_table_seq</span><span class="code_p">.</span><span class="code_n">nextval</span><span class="code_p">;</span>
<span class="code_k">end</span><span class="code_p">;</span>
<span class="code_o">/</span></pre></div></td></tr></table></div><br>
<br>
Als je een oudere database dan 11R2 gebruikt mag je een sequence niet rechtstreeks aan een variabele toewijzen, dan moet je trigger er ongeveer zo uit zien:<br>
<div class="code">SQL:<br><table class="phphighlight"><tr><td class="phphighlightline"><pre>1
2
3
4
5
6
7
8
9
</pre></td><td class="phphighlightcode"><div><pre><span class="code_k">create</span><span class="code_w"> </span><span class="code_k">trigger</span><span class="code_w"> </span><span class="code_n">test_table_bir</span><span class="code_w"> </span><span class="code_k">before</span><span class="code_w"> </span><span class="code_k">insert</span><span class="code_w"> </span><span class="code_k">on</span><span class="code_w"> </span><span class="code_n">test_table</span><span class="code_w"> </span><span class="code_k">for</span><span class="code_w"> </span><span class="code_k">each</span><span class="code_w"> </span><span class="code_k">row</span>
<span class="code_k">declare</span>

<span class="code_k">begin</span>
<span class="code_w">  </span><span class="code_k">select</span><span class="code_w"> </span><span class="code_n">test_table_seq</span><span class="code_p">.</span><span class="code_n">nextval</span>
<span class="code_w">    </span><span class="code_k">into</span><span class="code_w"> </span><span class="code_p">:</span><span class="code_k">new</span><span class="code_p">.</span><span class="code_n">id</span>
<span class="code_w">    </span><span class="code_k">from</span><span class="code_w"> </span><span class="code_n">dual</span><span class="code_p">;</span>
<span class="code_k">end</span><span class="code_p">;</span>
<span class="code_o">/</span></pre></div></td></tr></table></div><br>
<br>
<br>
en vervolgens de tabel vullen met<br>
<div class="code">SQL:<br><table class="phphighlight"><tr><td class="phphighlightline"><pre>1
</pre></td><td class="phphighlightcode"><div><pre><span class="code_k">insert</span><span class="code_w"> </span><span class="code_k">into</span><span class="code_w"> </span><span class="code_n">test_table</span><span class="code_p">(</span><span class="code_n">sample</span><span class="code_p">)</span><span class="code_w"> </span><span class="code_k">values</span><span class="code_w"> </span><span class="code_p">(</span><span class="code_mi">1234</span><span class="code_p">)</span></pre></div></td></tr></table></div><br>
<br>
en daarna je pl/sql code:<br>
<div class="code">SQL:<br><table class="phphighlight"><tr><td class="phphighlightline"><pre>1
2
3
4
5
6
7
8
9
10
</pre></td><td class="phphighlightcode"><div><pre><span class="code_k">create</span><span class="code_w"> </span><span class="code_k">procedure</span><span class="code_w"> </span><span class="code_n">doubler</span><span class="code_p">(</span><span class="code_n">pp_interations</span><span class="code_w"> </span><span class="code_nb">number</span><span class="code_p">)</span>
<span class="code_k">as</span>
<span class="code_w">  </span><span class="code_n">lv_counter</span><span class="code_w"> </span><span class="code_n">pls_integer</span><span class="code_w"> </span><span class="code_p">:</span><span class="code_o">=</span><span class="code_w"> </span><span class="code_mi">0</span><span class="code_p">;</span>
<span class="code_k">begin</span><span class="code_w"> </span>
<span class="code_w">  </span><span class="code_n">while</span><span class="code_w"> </span><span class="code_p">(</span><span class="code_w">  </span><span class="code_n">lv_counter</span><span class="code_w"> </span><span class="code_o">&lt;</span><span class="code_w"> </span><span class="code_n">pp_interations</span><span class="code_w"> </span><span class="code_p">)</span>
<span class="code_w">  </span><span class="code_n">loop</span>
<span class="code_w">    </span><span class="code_k">insert</span><span class="code_w"> </span><span class="code_k">into</span><span class="code_w"> </span><span class="code_n">test_table</span><span class="code_p">(</span><span class="code_n">sample</span><span class="code_p">)</span><span class="code_w"> </span><span class="code_p">(</span><span class="code_w"> </span><span class="code_k">select</span><span class="code_w"> </span><span class="code_n">sample</span><span class="code_w"> </span><span class="code_k">from</span><span class="code_w"> </span><span class="code_n">test_table</span><span class="code_p">)</span>
<span class="code_w">  </span><span class="code_k">end</span><span class="code_w"> </span><span class="code_n">loop</span><span class="code_p">;</span>
<span class="code_k">end</span><span class="code_p">;</span>
<span class="code_o">/</span></pre></div></td></tr></table></div><br>
Stuk minder iteraties nodig. Performance is nog steeds ruk (net zoals de initiële testcase), het gaat wel werken binnen afzienbare tijd. Bottleneck uiteindelijk zal I/O zijn..<br>
<br>
Ow, code is uiteraard ongetest.<br>
<br>
Ow2, het is uiteraard bad practice om je procedure als naam een reserved word (zoals insert) te geven, sterker nog: ik gok zomaar dat Oracle dat niet pikt <img src="https://tweakers.net/g/s/wink.svg" width="16" height="16" alt=";)">]]></content:encoded>
			<dc:creator>JaQ</dc:creator>
			<guid isPermaLink="false">https://gathering.tweakers.net/forum/list_message/37219540#37219540</guid>
			<pubDate>Mon, 28 Nov 2011 21:38:38 GMT</pubDate>
		</item>
		<item>
			<title>FatalError</title>
			<link>https://gathering.tweakers.net/forum/list_message/37219261#37219261</link>
			<description>Ik verplaats dit topic naar  Programming, Daat past het beter lijkt me </description>
			<content:encoded><![CDATA[Ik verplaats dit topic naar  Programming, Daat past het beter lijkt me <img src="https://tweakers.net/g/s/smile.svg" width="16" height="16" alt=":)">]]></content:encoded>
			<dc:creator>FatalError</dc:creator>
			<guid isPermaLink="false">https://gathering.tweakers.net/forum/list_message/37219261#37219261</guid>
			<pubDate>Mon, 28 Nov 2011 20:56:24 GMT</pubDate>
		</item>
		<item>
			<title>nielsl</title>
			<link>https://gathering.tweakers.net/forum/list_message/37218401#37218401</link>
			<description>Verwijderd schreef op maandag 28 november 2011 @ 16:31:
Hallo,

Ik heb een script gemaakt in unix die een stored procedure aanroept via sqlplus.

In het script staat niet meer dan:
code:1
2
sqlplus user@database
exec insert(20) ;
En de Stored Procedure ziet er ongeveer als volgt uit:
SQL:1
2
3
4
5
6
7
8
9
10
11
12
13
14
create or replace procedure insert(nr_of_inserts number)
as
  xx number ;
begin
  xx:=1;

loop
  insert into test_tabel(id, sample) values (xx, 1234) ; 
  xx:=xx+1;
  exit when xx&gt;nr_of_inserts;
end loop;
  commit;
end ;
/
Wat ik echter wil is dat er niet 20 maar een paar miljoen inserts gedaan worden en deze wil ik daarom parallel uitvoeren. Om even bij het voorbeeld te blijven zou ik nu graag parallel 4 * 5 inserts doen in de tabel test_tabel, met als wens dat mijn id uniek blijft (want ik verwacht dat als ik ze parallel start dat ik dan 4 * id 1 tm 5 krijg?).

Kan iemand me hierbij helpen?Voor wat betreft de uniqueness van je IDs, dat los je, afhankelijk van je database engine, op met keys. In MySQL is dat bijvoorbeeld een primary met auto increment. Daarnaast de vraag waarom je het script parallel wilt laten draaien? iets gaat je bottleneck zijn (ik gok disk, maargoed, ik weet niet op wat voor hardware je draait), die bottleneck haal je toch wel, of je dan scripts parallel draait, of gewoon 1 sequentieel script met een loop van 4 miljoen iteraties? Ik zou niet moeilijk doen en gewoon 4 miljoen opgeven. Multi core usage wordt als het goed is &quot;afgedwongen&quot; door je DBMS</description>
			<content:encoded><![CDATA[<blockquote><div class="message-quote-div"><b><a href="https://gathering.tweakers.net/forum/list_message/37217430#37217430" rel="external" class="messagelink">Verwijderd schreef op maandag 28 november 2011 @ 16:31</a>:</b><br>
Hallo,<br>
<br>
Ik heb een script gemaakt in unix die een stored procedure aanroept via sqlplus.<br>
<br>
In het script staat niet meer dan:<br>
<div class="code">code:<br><table class="phphighlight"><tr><td class="phphighlightline"><pre>1
2
</pre></td><td class="phphighlightcode"><div><pre>sqlplus user@database
exec insert(20) ;</pre></div></td></tr></table></div><br>
En de Stored Procedure ziet er ongeveer als volgt uit:<br>
<div class="code">SQL:<br><table class="phphighlight"><tr><td class="phphighlightline"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
</pre></td><td class="phphighlightcode"><div><pre><span class="code_k">create</span><span class="code_w"> </span><span class="code_k">or</span><span class="code_w"> </span><span class="code_k">replace</span><span class="code_w"> </span><span class="code_k">procedure</span><span class="code_w"> </span><span class="code_k">insert</span><span class="code_p">(</span><span class="code_n">nr_of_inserts</span><span class="code_w"> </span><span class="code_nb">number</span><span class="code_p">)</span>
<span class="code_k">as</span>
<span class="code_w">  </span><span class="code_n">xx</span><span class="code_w"> </span><span class="code_nb">number</span><span class="code_w"> </span><span class="code_p">;</span>
<span class="code_k">begin</span>
<span class="code_w">  </span><span class="code_n">xx</span><span class="code_p">:</span><span class="code_o">=</span><span class="code_mi">1</span><span class="code_p">;</span>

<span class="code_n">loop</span>
<span class="code_w">  </span><span class="code_k">insert</span><span class="code_w"> </span><span class="code_k">into</span><span class="code_w"> </span><span class="code_n">test_tabel</span><span class="code_p">(</span><span class="code_n">id</span><span class="code_p">,</span><span class="code_w"> </span><span class="code_n">sample</span><span class="code_p">)</span><span class="code_w"> </span><span class="code_k">values</span><span class="code_w"> </span><span class="code_p">(</span><span class="code_n">xx</span><span class="code_p">,</span><span class="code_w"> </span><span class="code_mi">1234</span><span class="code_p">)</span><span class="code_w"> </span><span class="code_p">;</span><span class="code_w"> </span>
<span class="code_w">  </span><span class="code_n">xx</span><span class="code_p">:</span><span class="code_o">=</span><span class="code_n">xx</span><span class="code_o">+</span><span class="code_mi">1</span><span class="code_p">;</span>
<span class="code_w">  </span><span class="code_n">exit</span><span class="code_w"> </span><span class="code_k">when</span><span class="code_w"> </span><span class="code_n">xx</span><span class="code_o">&gt;</span><span class="code_n">nr_of_inserts</span><span class="code_p">;</span>
<span class="code_k">end</span><span class="code_w"> </span><span class="code_n">loop</span><span class="code_p">;</span>
<span class="code_w">  </span><span class="code_k">commit</span><span class="code_p">;</span>
<span class="code_k">end</span><span class="code_w"> </span><span class="code_p">;</span>
<span class="code_o">/</span></pre></div></td></tr></table></div><br>
Wat ik echter wil is dat er niet 20 maar een paar miljoen inserts gedaan worden en deze wil ik daarom parallel uitvoeren. Om even bij het voorbeeld te blijven zou ik nu graag parallel 4 * 5 inserts doen in de tabel test_tabel, met als wens dat mijn id uniek blijft (want ik verwacht dat als ik ze parallel start dat ik dan 4 * id 1 tm 5 krijg?).<br>
<br>
Kan iemand me hierbij helpen?</div></blockquote>Voor wat betreft de uniqueness van je IDs, dat los je, afhankelijk van je database engine, op met keys. In MySQL is dat bijvoorbeeld een primary met auto increment. Daarnaast de vraag waarom je het script parallel wilt laten draaien? iets gaat je bottleneck zijn (ik gok disk, maargoed, ik weet niet op wat voor hardware je draait), die bottleneck haal je toch wel, of je dan scripts parallel draait, of gewoon 1 sequentieel script met een loop van 4 miljoen iteraties? Ik zou niet moeilijk doen en gewoon 4 miljoen opgeven. Multi core usage wordt als het goed is &quot;afgedwongen&quot; door je DBMS]]></content:encoded>
			<dc:creator>nielsl</dc:creator>
			<guid isPermaLink="false">https://gathering.tweakers.net/forum/list_message/37218401#37218401</guid>
			<pubDate>Mon, 28 Nov 2011 18:18:23 GMT</pubDate>
		</item>
		<item>
			<title>Jitse H</title>
			<link>https://gathering.tweakers.net/forum/list_message/37218388#37218388</link>
			<description>M.b.t. het uniek blijven van het ID:
Kent de database een auto_increment functie? Dan hoef je namelijk geen id mee te geven dan pakt hij automatisch de eerstvolgende.

Parrallel draaien van het proces kan ik je geen advies over geven.</description>
			<content:encoded><![CDATA[M.b.t. het uniek blijven van het ID:<br>
Kent de database een auto_increment functie? Dan hoef je namelijk geen id mee te geven dan pakt hij automatisch de eerstvolgende.<br>
<br>
Parrallel draaien van het proces kan ik je geen advies over geven.]]></content:encoded>
			<dc:creator>Jitse H</dc:creator>
			<guid isPermaLink="false">https://gathering.tweakers.net/forum/list_message/37218388#37218388</guid>
			<pubDate>Mon, 28 Nov 2011 18:15:36 GMT</pubDate>
		</item>
		<item>
			<title>Verwijderd</title>
			<link>https://gathering.tweakers.net/forum/list_message/37217430#37217430</link>
			<description>Hallo,

Ik heb een script gemaakt in unix die een stored procedure aanroept via sqlplus.

In het script staat niet meer dan:
code:1
2
sqlplus user@database
exec insert(20) ;
En de Stored Procedure ziet er ongeveer als volgt uit:
SQL:1
2
3
4
5
6
7
8
9
10
11
12
13
14
create or replace procedure insert(nr_of_inserts number)
as
  xx number ;
begin
  xx:=1;

loop
  insert into test_tabel(id, sample) values (xx, 1234) ; 
  xx:=xx+1;
  exit when xx&gt;nr_of_inserts;
end loop;
  commit;
end ;
/
Wat ik echter wil is dat er niet 20 maar een paar miljoen inserts gedaan worden en deze wil ik daarom parallel uitvoeren. Om even bij het voorbeeld te blijven zou ik nu graag parallel 4 * 5 inserts doen in de tabel test_tabel, met als wens dat mijn id uniek blijft (want ik verwacht dat als ik ze parallel start dat ik dan 4 * id 1 tm 5 krijg?).

Kan iemand me hierbij helpen?</description>
			<content:encoded><![CDATA[Hallo,<br>
<br>
Ik heb een script gemaakt in unix die een stored procedure aanroept via sqlplus.<br>
<br>
In het script staat niet meer dan:<br>
<div class="code">code:<br><table class="phphighlight"><tr><td class="phphighlightline"><pre>1
2
</pre></td><td class="phphighlightcode"><div><pre>sqlplus user@database
exec insert(20) ;</pre></div></td></tr></table></div><br>
En de Stored Procedure ziet er ongeveer als volgt uit:<br>
<div class="code">SQL:<br><table class="phphighlight"><tr><td class="phphighlightline"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
</pre></td><td class="phphighlightcode"><div><pre><span class="code_k">create</span><span class="code_w"> </span><span class="code_k">or</span><span class="code_w"> </span><span class="code_k">replace</span><span class="code_w"> </span><span class="code_k">procedure</span><span class="code_w"> </span><span class="code_k">insert</span><span class="code_p">(</span><span class="code_n">nr_of_inserts</span><span class="code_w"> </span><span class="code_nb">number</span><span class="code_p">)</span>
<span class="code_k">as</span>
<span class="code_w">  </span><span class="code_n">xx</span><span class="code_w"> </span><span class="code_nb">number</span><span class="code_w"> </span><span class="code_p">;</span>
<span class="code_k">begin</span>
<span class="code_w">  </span><span class="code_n">xx</span><span class="code_p">:</span><span class="code_o">=</span><span class="code_mi">1</span><span class="code_p">;</span>

<span class="code_n">loop</span>
<span class="code_w">  </span><span class="code_k">insert</span><span class="code_w"> </span><span class="code_k">into</span><span class="code_w"> </span><span class="code_n">test_tabel</span><span class="code_p">(</span><span class="code_n">id</span><span class="code_p">,</span><span class="code_w"> </span><span class="code_n">sample</span><span class="code_p">)</span><span class="code_w"> </span><span class="code_k">values</span><span class="code_w"> </span><span class="code_p">(</span><span class="code_n">xx</span><span class="code_p">,</span><span class="code_w"> </span><span class="code_mi">1234</span><span class="code_p">)</span><span class="code_w"> </span><span class="code_p">;</span><span class="code_w"> </span>
<span class="code_w">  </span><span class="code_n">xx</span><span class="code_p">:</span><span class="code_o">=</span><span class="code_n">xx</span><span class="code_o">+</span><span class="code_mi">1</span><span class="code_p">;</span>
<span class="code_w">  </span><span class="code_n">exit</span><span class="code_w"> </span><span class="code_k">when</span><span class="code_w"> </span><span class="code_n">xx</span><span class="code_o">&gt;</span><span class="code_n">nr_of_inserts</span><span class="code_p">;</span>
<span class="code_k">end</span><span class="code_w"> </span><span class="code_n">loop</span><span class="code_p">;</span>
<span class="code_w">  </span><span class="code_k">commit</span><span class="code_p">;</span>
<span class="code_k">end</span><span class="code_w"> </span><span class="code_p">;</span>
<span class="code_o">/</span></pre></div></td></tr></table></div><br>
Wat ik echter wil is dat er niet 20 maar een paar miljoen inserts gedaan worden en deze wil ik daarom parallel uitvoeren. Om even bij het voorbeeld te blijven zou ik nu graag parallel 4 * 5 inserts doen in de tabel test_tabel, met als wens dat mijn id uniek blijft (want ik verwacht dat als ik ze parallel start dat ik dan 4 * id 1 tm 5 krijg?).<br>
<br>
Kan iemand me hierbij helpen?]]></content:encoded>
			<dc:creator>Verwijderd</dc:creator>
			<guid isPermaLink="false">https://gathering.tweakers.net/forum/list_message/37217430#37217430</guid>
			<pubDate>Mon, 28 Nov 2011 15:31:02 GMT</pubDate>
		</item>
	</channel>
</rss>