Arsip: tanya procedure di mysql 5 + create user

 
user image
more 17 years ago

greatjon2002

Begini nih aku mo buat program delphi database pake mysql 5 aku buat procedure di my sql kira kira kaya gini nih (tapi dah kusederhanakan, yg dibawah ini yg bikin aku pusing): ------------------------------------------------------------ delimiter // create procedure daftarkan(in id char(15)) begin create user id; end; // call daftarkan('pusing')// --------------------------------------------------------------------- lha yg jadi masalah tuh gak ada user yg namanya 'pusing' tapi adanya user dg nama 'id'. kok begitu? mohon pencerahannya, maklum aku masih cupu nih. soalnya aku mau buat klien di delphi yg bisa ndaftarin id baru tapi nanti ada konfirmasi2 segala jadi aku lebih suka pake procedure terus grant execute...... dsb. aku sengaja gk pakai grant create user gitu. makacihhhhhhhhhhhhhh...................
user image
more 17 years ago

_lmz

@greatjon2002: Begini nih aku mo buat program delphi database pake mysql 5 aku buat procedure di my sql kira kira kaya gini nih (tapi dah kusederhanakan, yg dibawah ini yg bikin aku pusing): ------------------------------------------------------------ delimiter // create procedure daftarkan(in id char(15)) begin create user id; end; // call daftarkan('pusing')// --------------------------------------------------------------------- lha yg jadi masalah tuh gak ada user yg namanya 'pusing' tapi adanya user dg nama 'id'. kok begitu? mohon pencerahannya, maklum aku masih cupu nih. soalnya aku mau buat klien di delphi yg bisa ndaftarin id baru tapi nanti ada konfirmasi2 segala jadi aku lebih suka pake procedure terus grant execute...... dsb. aku sengaja gk pakai grant create user gitu. makacihhhhhhhhhhhhhh...................
Rasanya tidak semua hal mendukung parameter seperti itu. Siapa tahu "create user" adalah salah satunya. Kalau di database lain ada "EXECUTE IMMEDIATE" untuk mengeksekusi perintah langsung dari string (MySQL hanya punya PREPARE). Mungkin di MySQL 5.1 :) ? Ref: http://dev.mysql.com/doc/refman/5.1/en/sqlps.html
As of MySQL 5.1.12, the following additional statements are supported: ... {CREATE | RENAME | DROP} USER ...
O ya kalau nggak salah kan MySQL bisa membuat user dengan memasukkan ke tabel user nya langsung? mungkin bisa dicoba... Bisa juga lihat: http://forge.mysql.com/snippets/view.php?id=13 tes apa saja yang disupport oleh dynamic SQL dalam stored proc.
user image
more 17 years ago

masdi2t

tepat sekali _lmz, kita bisa memanfaatkan dinamik sql dari mysql. dinamik sql adalah sebuah fasilitas dimana kita bisa membangun perintah sql kita saat run-time dan mengeksekusinya. tp memang sayang, hanya beberapa perintah saja yang didukung, diantaranya: CREATE TABLE, DELETE, DO, INSERT, REPLACE, SELECT, SET, UPDATE, SHOW (sejauh yg saya tau dari manual nya). disitu tidak ada perintah CREATE USER dan karena perintah itu memakai parameter pertama setelah kata USER sebagai nama user maka yang dialami greatjon2002 adalah wajar. tp dengan pengetahuan bahwa CREATE USER sebenarnya hanyalah melakukan entri di tabel MYSQL.USER maka bisa dimanfaatkan dinamik sql dengan perintah INSERT. diakhir perintah INSERT tersebut kita harus menjalankan perintah FLUSH PRIVILEGES supaya user yang baru tersebut bisa dipakai. berikut contoh dinamik sql baik yang menggunakan parameter dan tidak. tanpa parameter:
CREATE PROCEDURE sp_create_user(name char(16), host char(60))
BEGIN
  declare sqlquery varchar(255);
  select concat('insert into mysql.user (user, host) values (''', name, ''', ''', host, ''')') into @sqlquery;
  prepare sqlstat FROM @sqlquery;
  execute sqlstat;
  deallocate prepare sqlstat;
  flush privileges;
END
dengan parameter:
CREATE PROCEDURE sp_create_user2(name char(16), host char(60))
BEGIN
  declare sqlquery varchar(255);
  declare pname varchar(255);
  declare phost varchar(255);
  select concat('insert into mysql.user (User, Host) values (?, ?)') into @sqlquery;
  prepare sqlstat FROM @sqlquery;
  set @pname = name;
  set @phost = host;
  execute sqlstat using @pname, @phost;
  deallocate prepare sqlstat;
  flush privileges;
END
user image
more 17 years ago

_lmz

@masdi2t: tanpa parameter:
CREATE PROCEDURE sp_create_user(name char(16), host char(60))
BEGIN
  declare sqlquery varchar(255);
  select concat('insert into mysql.user (user, host) values (''', name, ''', ''', host, ''')') into @sqlquery;
  prepare sqlstat FROM @sqlquery;
  execute sqlstat;
  deallocate prepare sqlstat;
  flush privileges;
END
dengan parameter:
CREATE PROCEDURE sp_create_user2(name char(16), host char(60))
BEGIN
  declare sqlquery varchar(255);
  declare pname varchar(255);
  declare phost varchar(255);
  select concat('insert into mysql.user (User, Host) values (?, ?)') into @sqlquery;
  prepare sqlstat FROM @sqlquery;
  set @pname = name;
  set @phost = host;
  execute sqlstat using @pname, @phost;
  deallocate prepare sqlstat;
  flush privileges;
END
Hmm, apakah dalam stored proc untuk insert biasa seperti itu saja harus di prepare dari string? (semoga tidak, daku tidak biasa pakai MySQL)
user image
more 17 years ago

masdi2t

lain ladang lain belalang, lain DBEngine lain juga implementasinya (walaupun untuk tujuan yg sama). begitulah MySQL mengimplementasikan dinamik SQL. tapi klu ada cara lain saya akan senang sekali mengetahui nya. hal yg serupa juga dijumpai untuk konsep tabel temporary, bagaimana MySQL dan Oracle mengimplemetasikan pasti berbeda :)
user image
more 17 years ago

_lmz

@masdi2t: lain ladang lain belalang, lain DBEngine lain juga implementasinya (walaupun untuk tujuan yg sama). begitulah MySQL mengimplementasikan dinamik SQL. tapi klu ada cara lain saya akan senang sekali mengetahui nya. hal yg serupa juga dijumpai untuk konsep tabel temporary, bagaimana MySQL dan Oracle mengimplemetasikan pasti berbeda :)
MySQL bukan database favorit saya, tapi kalau harus insert biasa (note: bukan dynamic SQL, karena insert seperti itu tidak perlu dynamic SQL) dalam SP harus diprepare seperti itu keterlaluan dong :)... [code:1:d3f1b9d5a4] mysql> create table t ( ca char(10), cb char(10) ); Query OK, 0 rows affected (0.06 sec) mysql> delimiter $ mysql> create procedure ins(IN a char(10), IN b char(10)) -> begin -> insert into t (ca, cb) values (a, b); -> end; -> $ Query OK, 0 rows affected (0.00 sec) mysql> delimiter ; mysql> call ins('aaa', 'bbb'); Query OK, 1 row affected (0.02 sec) mysql> select * from t; +------+------+ | ca | cb | +------+------+ | aaa | bbb | +------+------+ 1 row in set (0.00 sec) [/code:1:d3f1b9d5a4] Kalau boleh menebak saja, mekanisme penggunaan variabel SP dalam statement ini sama dengan mekanisme parameter pada prepared statement. Tapi mungkin anda sudah tahu itu :).
user image
more 17 years ago

greatjon2002

engggg..... sebentar.... sebentar..... 1.kayaknya untuk buat user di mysql 5 (bukan 4) kalu pake insert ke mysql.user kayaknya gk afdhol deh atau malah-malah gk bisa, memang sih wkt aku pk mysql 4 bisa, tp waktu pk mysql 5 jd ribet, jadi aku pake create user ato pake grant langsung. 2. Inti pertanyaanku yg paling utama tuh misal id sebuah variable, lha bagaimana menampilkan nilai id itu sebab kalo langsung (misal nilai id adalah 'hh') create user id; yg jadi bukan bertambah 1 user yg bernama 'hh' tp malah bertambah 1 user yg bernama id (atau 'id'). trima kasih.
user image
more 17 years ago

_lmz

@greatjon2002: engggg..... sebentar.... sebentar..... 1.kayaknya untuk buat user di mysql 5 (bukan 4) kalu pake insert ke mysql.user kayaknya gk afdhol deh atau malah-malah gk bisa, memang sih wkt aku pk mysql 4 bisa, tp waktu pk mysql 5 jd ribet, jadi aku pake create user ato pake grant langsung. 2. Inti pertanyaanku yg paling utama tuh misal id sebuah variable, lha bagaimana menampilkan nilai id itu sebab kalo langsung (misal nilai id adalah 'hh') create user id; yg jadi bukan bertambah 1 user yg bernama 'hh' tp malah bertambah 1 user yg bernama id (atau 'id'). trima kasih.
1. tidak bisa saya jawab, kurang pengalaman :( 2. Tidak bisa karena CREATE USER tidak bisa diprepare sampai MySQL 5.1. lihat: http://dev.mysql.com/doc/refman/5.1/en/sqlps.html . Rasanya kalau CREATE USER sudah bisa diprepare maka CREATE USER <var> akan berhasil sendiri tanpa harus prepare dari string.
user image
more 17 years ago

masdi2t

yg pertama untuk _lmz, memang benar untuk insert biasa tidak perlu pake dinamik sql, sori saya terjebak dengan pemakaian kata itu dan 'EXECUTE IMMEDIATE' pada posting mas yang pertama. cuman mau membagi ilmu bahwa di mysql juga ada fasilitas itu. trus untuk create user memakai insert kok ngk afdol saya kurang setuju. bgmn jika perintah create user itu sebenarnya memang perintah insert ke tabel mysql.user. perbedaan pada mysql4 dan mysql5 adalah pada tabel mysql.user ada penambahan sekitar 4 atau 5 field untuk menangani grant ke view dan stored procedure. so... why bother?? berarti perintah grant itu apa, mysql mengimplemetasikan dengan update field2 terkait di tabel mysql.user. silakan bereksperimen sendiri (bisa di cek juga fungsi tabel2 yang lain yang ada di database mysql) :) trus untuk yang kedua. menampilkan variabel cukup dengan dipanggil aja nama variabel nya menggunakan perintah select. untuk mengisi variabel tentunya dah tau ya, dengan perintah set. berikut sebuah sp sederhana yang menampilkan variabel yang diinput melalui parameter sp itu sendiri

CREATE PROCEDURE sp_tes (a varchar(5))
BEGIN
  select a;
END
trus kenapa klu menggukanan perintah create user ngk bisa variabel yang muncul. itu dikarenakan karakteristik perintah create user itu sendiri. create user menurut saya memakai parameter pertama setelah perintah create user sebagai nama user nya, jadi bukannya mysql mengganti isi variabel tersebut dengan nilainya, tp memakai variabel itu sendiri sebagai nama user nya. nah mengakalinya dengan memakai insert tadi. semoga membantu :)
more ...
  • Pages:
  • 1
Share to
Local Business Directory, Search Engine Submission & SEO Tools FreeWebSubmission.com SonicRun.com