Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
DO WHILE Insert Anweisung [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
DO WHILE Insert Anweisung


 
tomtherock
21-06-2010, 12:13 
 
Hallo an die Runde,

Ich möchte gerne 1000 Datensätze generieren die einen Variablen wert haben welcher fortlaufend ist.

Bisher hab ich das immer umständlich über eine INSERT / SELECT Anweisung gemacht.

In der Mysql DOKU bin ich aber auf die DO While Prozedur gestoßen nur leider bekommen ich das nicht gebacken :(.
MySQL :: MySQL 5.1 Referenzhandbuch :: 19.2.10.7 WHILE-Anweisung (http://dev.mysql.com/doc/refman/5.1/de/while-statement.html)

Mein Query:

CREATE PROCEDURE gen()
BEGIN
DECLARE vars1 INT DEFAULT 5;
SET vars1 = 1000;
WHILE vars1 <= 2000 DO
INSERT test_tbl set textinhalt = CONCAT ('TEST', vars1);
SET vars1 = vars1 + 1;
END WHILE;
END


Fehler:
SQL-Befehl:

CREATE PROCEDURE gen( ) BEGIN DECLARE vars1 INT DEFAULT 5;

Könntet ihr mit das weiterhelfen hab mir auch schon Beispiele in der Doku angesehen die sind genau so aufgebaut?!

Grüße

 
AmicaNoctis
21-06-2010, 12:38 
 
Hallo,

hast du evtl. vergessen, den Delimiter zu ändern?


delimiter |
CREATE PROCEDURE gen()
BEGIN
DECLARE vars1 INT DEFAULT 5;
SET vars1 = 1000;
WHILE vars1 <= 2000 DO
INSERT test_tbl set textinhalt = CONCAT ('TEST', vars1);
SET vars1 = vars1 + 1;
END WHILE;
END|
delimiter ;


Gruß,

Amica

 
tomtherock
21-06-2010, 12:50 
 
Muss man diesen Neu setzen kenn mich hier leider noch nicht so aus,
hab dein Query mal kopiert kommt leider immer noch der gleich Fehler oder
wie muss ich den Delimiter neu setzen?

Liegt ja anscheinend an der Variablen Deklaration...

 
AmicaNoctis
21-06-2010, 13:00 
 
Wie setzt du die Statements denn ab? Auf der MySQL-Konsole, mit PHP oder mit PHPMyAdmin?

 
tomtherock
21-06-2010, 13:03 
 
mit PHPMyAdmin

*join*

also hab ihn auf "|" geändert und hat er nun auch ausgeführt nur leider nix in meine Tabelle geschrieben :(.

Muss ich die erzeugte Prozedur erst noch aufrufen?

 
AmicaNoctis
21-06-2010, 13:08 
 
Dann nimm einfach nochmal deinen Code, füge den im SQL-Tab ein und ändere unter der Eingabebox den Begrenzer auf „|“ (vertical bar).

Edit:
Muss ich die erzeugte Prozedur erst noch aufrufen?

Aber natürlich.

 
tomtherock
21-06-2010, 13:15 
 
ah ich habs...

"CALL gen()"

hat funktioniert...man ich Anfänger danke für den Tipp!

Könnte man diese do While auch ohne eine Prozedur zur erzeugen direkt ausführen lassen oder muss man die vorher erzeugen?

 
AmicaNoctis
21-06-2010, 13:25 
 
Soweit ich weiß, gibt es diese Sprachkonstrukte nur für und im Zusammenhang mit gespeicherten Prozeduren, Funktionen und Triggern.

Also kannst du While nicht alleinstehend benutzen.

 
eagle275
21-06-2010, 20:30 
 
Mal so rein der Neugierde halber ...

warum gehst du nicht mit


CREATE TABLE test (
varwert int not null auto_increment [primary key]
);
ALTER TABLE test SET auto_increment= #Startwert;


und dann in php

[PHP]
// mit offener DB-Connection in $connection
for ($i=0;$i<Anzahl;$i++) {
$sql="INSERT into test () VALUES ()";
mysql_query($sql, $connection);
}
[PHP]

dann funzt das auch, wenn du mal keine MySQL 5.x -DB vorfindest

 
tomtherock
22-06-2010, 10:17 
 
ja mit php is easy klar, aber ich will bei mehreren 100.000 Inserts nur ungern den Compiler Vergewaltingen ;)

Zudem will ich mein wissen bei SQL weiter ausbauen ist halt schneller ne SQL Frage einfach auszuführen als erstmal wieder ein Script anzupassen etc...

Aber trotzdem danke für den Vorschlag.

Grüße
Tom

- -

Alle Zeitangaben in WEZ +2. Es ist jetzt 16:02 Uhr.