Arsip: tanya procedure di mysql 5 + create user
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...................
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.
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
more 17 years ago
_lmz
@masdi2t: tanpa parameter:Hmm, apakah dalam stored proc untuk insert biasa seperti itu saja harus di prepare dari string? (semoga tidak, daku tidak biasa pakai MySQL)dengan 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
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
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 :)
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 :).
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.
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.
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
reply |
Report Obsolete
Last Articles
Last Topic
- PascalTalk #6: (Podcast) Kuliah IT di luar negeri, susah gak sih?
by LuriDarmawan in Tutorial & Community Project more 4 years ago - PascalTalk #5: UX: Research, Design and Engineer
by LuriDarmawan in Tutorial & Community Project more 4 years ago - PascalTalk #4: Obrolan Ringan Seputar IT
by LuriDarmawan in Tutorial & Community Project more 4 years ago - PascalTalk #2: Membuat Sendiri SMART HOME
by LuriDarmawan in Tutorial & Community Project more 4 years ago - PascalTalk #3: RADically Fast and Easy Mobile Apps Development with Delphi
by LuriDarmawan in Tutorial & Community Project more 4 years ago - PascalTalk #1: Pemanfaatan Artificial Intelligence di Masa Covid-19
by LuriDarmawan in Tutorial & Community Project more 4 years ago - Tempat Latihan Posting
by LuriDarmawan in OOT more 5 years ago - Archive
- Looping lagi...
by idhiel in Hal umum tentang Pascal Indonesia more 12 years ago - [ask] koneksi ke ODBC user Dsn saat runtime dengan ado
by halimanh in FireBird more 12 years ago - Validasi menggunakan data tanggal
by mas_kofa in Hal umum tentang Pascal Indonesia more 12 years ago
Random Topic
- Tampilan combo box 2 kolom ?
by debby in Hal umum tentang Pascal Indonesia more 17 years ago - bikin program Client-Server??????
by lela in MySQL more 18 years ago - select & filter record di dbgride
by prie in Tip n Trik Pemrograman more 15 years ago - Menjelang Perubahan Tahun
by ichan29 in OOT more 15 years ago - Bingung Trigger Nggak Jalan Pd Tabel Master - Detail
by huaha in Hal umum tentang Pascal Indonesia more 17 years ago - Aplikasi Stok Antar Provinsi
by Thunder in Web Programming more 15 years ago - VCL Crystal Report dimana akan ku cari....?
by palapetir in Tip n Trik Pemrograman more 19 years ago - Masalah ngeprint lagi..
by ivan in Hal umum tentang Pascal Indonesia more 18 years ago - Program yang bisa diupdate
by Fransisca_cicilia in Hal umum tentang Pascal Indonesia more 15 years ago - Error saat proses report dengan crystal report...
by indira_srg in Hal umum tentang Pascal Indonesia more 18 years ago