Saya lagi coba bikin trigger untuk update data.
tiap kali insert data ke file tbldtljurnal selalu keluar error
explici or implicit commit is not allowed is stored function or
trigger.
udah benar kah caranya mengkaitkan dua buah file header dan detil,
pakai sp.
mohon solusinya.
tks
file trigger
DELIMITER $$
DROP TRIGGER /*!50032 IF EXISTS */ `dblintas`.`tr_insert_jurnal`$$
CREATE
/*!50017 DEFINER = 'root'@'localhost' */
TRIGGER `dblintas`.`tr_insert_jurnal` AFTER INSERT ON `dblintas`.`tbldtljurnal`
FOR EACH ROW BEGIN
call mk_tbljurnalsem();
INSERT INTO tbljurnalsem set no_acct=New.no_acct, tanggal=tblhdrjurnal.tanggal,
t_db=NEW.t_db, t_cr=NEW.t_cr;
CASE
WHEN MONTH(tbljurnalsem.tanggal) = 1 AND NEW.t_cr > 0 THEN
UPDATE tblchat set cr_01 = NEW.t_cr WHERE tblchat.no_acct = NEW.no_acct;
WHEN MONTH(tbljurnalsem.tanggal) = 1 AND NEW.t_db > 0 THEN
UPDATE tblchat set cr_01 = NEW.t_db WHERE tblchat.no_acct = NEW.no_acct;
WHEN MONTH(tbljurnalsem.tanggal) = 2 AND NEW.t_cr > 0 THEN
UPDATE tblchat set cr_01 = NEW.t_cr WHERE tblchat.no_acct = NEW.no_acct;
WHEN MONTH(tbljurnalsem.tanggal) = 2 AND NEW.t_db > 0 THEN
UPDATE tblchat set cr_01 = NEW.t_db WHERE tblchat.no_acct = NEW.no_acct;
END CASE;
END;
$$
DELIMITER ;
file procesur
DELIMITER $$
DROP PROCEDURE IF EXISTS `dblintas`.`mk_tbljurnalsem`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `mk_tbljurnalsem`()
BEGIN
drop table if exists tbljurnalsem;
create table tbljurnalsem(no_acct varchar(28), tanggal date, t_db numeric(14,2), t_cr numeric(14,2));
/*INSERT INTO tbljurnalsem (SELECT a.no_acct, b.tanggal, a.t_db, a.t_cr FROM tbldtljurnal AS a,
tblhdrjurnal AS b WHERE a.no_dok = b.no_dok); */
END$$
DELIMITER ;
--
Best regards,
selfersoft
mailto:selfe...@gmail.com
> file procesur
> DELIMITER $$
>
> DROP PROCEDURE IF EXISTS `dblintas`.`mk_tbljurnalsem`$$
>
> CREATE DEFINER=`root`@`localhost` PROCEDURE `mk_tbljurnalsem`()
> BEGIN
> drop table if exists tbljurnalsem;
http://mysql.openmirrors.org/doc/refman/5.1/en/implicit-commit.html
drop table melakukan implicit commit, dan akibatnya tidak diizinkan
berada dalam prosedur.
--
FAN
FLUSH in a stored procedure, such a
stored procedure cannot be called from a stored function or
trigger.
Masih nggak ngerti pak, terus solusinya bagaimana pak.
atau nggak perlu pakai table sementara, bisa nggak langsung update ke
file tblchat dari table tblhdrjurnal dan tbldtljurnal nya pak
tks.
--
Tergantung logic aplikasinya gimana :) Mohon maaf, saya gak bisa bantu
banyak di sini karna mempelajari logic aplikasi bisa butuh waktu
panjang. Tapi kalo diliihat sekilas sih kayaknya tbljurnalsem isinya
cuma satu row ya? Mestinya kamu bisa pake SELECT INTO ke variabel.
Jadi ganti penggunaan tabel sementara (tbljurnalsem) dengan variabel.
http://dev.mysql.com/doc/refman/5.1/en/user-variables.html
http://dev.mysql.com/doc/refman/5.1/en/select-into-statement.html
Kalo masih butuh bantuan lebih lanjut (untuk implementasi langsung
misalnya), mungkin RQ atau rekan lain bisa memberikan rekomendasi
kenalan yang bisa memberikan professional assistance :)
PS : mysql-i...@googlegroups.com itu email addressnya MySQL
Indonesia lho, bukan email address saya lho. Kayaknya address book-mu
mesti diupdate
--
FAN
Saya bingung ini milis atau help ajak mysql indonesia ya ?
tiap kali bertanya selalu disuruh baca ref manual nya mysql.
karena belum ngerti di ref nya makanya tanya ke sini.
emang hanya buruh 1 row, oh bisa pakai variabel.
saya baca help dulu, kenapa milis ini nggak bisa kasih contoh sedikit
untuk kita2 yang baru ngenal mysql
> http://dev.mysql.com/doc/refman/5.1/en/user-variables.html
> http://dev.mysql.com/doc/refman/5.1/en/select-into-statement.html
--
... karena hal yang Anda tanyakan sudah dibahas cukup lengkap di ref
manualnya Om, dengan penjelasan dan contoh yang cukup lengkap.
> karena belum ngerti di ref nya makanya tanya ke sini.
>
Jika memang begitu akan lebih membantu jika Anda sebutkan bagian mana
yang belum dimengerti. Untuk pertanyaan tentang "explicit or implicit
commit is not allowed", maupun workaroundnya, IMHO penjelasan paling
lengkap justru ada ref manual juga.
> emang hanya buruh 1 row, oh bisa pakai variabel.
> saya baca help dulu, kenapa milis ini nggak bisa kasih contoh sedikit
> untuk kita2 yang baru ngenal mysql
>
Untuk pengunaan variabel, contohnya juga udah ada juga di manual.
Silakan dicoba dulu, jika menemukan kesulitan bisa diposting lagi di
sini. Mestinya sih trigger Anda tidak perlu menggunakan temporary
table dan procedure lagi.
--
FAN
-- jadi gw kagak tersinggung ama kata-kata loe yg ini :Saya bingung ini milis atau help ajak mysql indonesia ya ?
tiap kali bertanya selalu disuruh baca ref manual nya mysql.


Saya mohon maaf kalau bapak2 tersinggung, udah hampir 1 minggu obok2
nggak berhasil juga.
Saya punya
tblhdrjurnal no_dok C(9), tanggal D(), thnbln C(6)
tbldtljurnal no_dok C(9), no_acct C(10), t_db N(14,2), t_cr N(14,2),
thnbln C(6)
tblchat no_acct C(9), cd_group C(3), nama_chat C(40), tahun C(4),cr_01 N(14,2), db_01 N(14,2)
tblgroup cd_group C(3), nama_group C(45), db_01 N(14,2), cr_01
N(14,2)
dst.
saya mau setiap kali input data ke tbldtljurnal langsung trigger ke
tblchat sesuai bulannya.
dan trigger ke tblgroup juga.
Saya coba bikin trigger seperti yang bapak2 sarankan pakai var
SELECT a.tanggal, b.no_acct, b.t_db, b.t_cr INTO @tanggal, @no_acct, @t_db, @t_cr
FROM tblhdrjurnal AS a, tbldtljurnal AS b
WHERE a.no_dok = b.no_dok AND b.no_acct = NEW.no_acct;
waktu di jalankan di applikasi langsung error, result consisted of
more than one row.
Lalu saya coba hanya bikin select tblhdrjurnal.tanggal INTO @tgl
from tblhdrjurnal
hasil juga sama keluar error seperti diatas.
DELIMITER $$
DROP TRIGGER /*!50032 IF EXISTS */ `dblintas`.`tr_insert_jurnal`$$
CREATE
/*!50017 DEFINER = 'root'@'localhost' */
TRIGGER `dblintas`.`tr_insert_jurnal` AFTER INSERT ON `dblintas`.`tbldtljurnal`
FOR EACH ROW BEGIN
SELECT a.tanggal, b.no_acct, b.t_db, b.t_cr INTO @tanggal, @no_acct, @t_db, @t_cr
FROM tblhdrjurnal AS a, tbldtljurnal AS b
WHERE a.no_dok = b.no_dok AND b.no_acct = NEW.no_acct;
CASE
WHEN MONTH(@tanggal) = 1 AND NEW.t_cr > 0 THEN
UPDATE tblchat set cr_01 = NEW.t_cr WHERE tblchat.no_acct = NEW.no_acct;
WHEN MONTH(@tanggal) = 1 AND NEW.t_db > 0 THEN
UPDATE tblchat set cr_01 = NEW.t_db WHERE tblchat.no_acct = NEW.no_acct;
WHEN MONTH(@tanggal) = 2 AND NEW.t_cr > 0 THEN
UPDATE tblchat set cr_01 = NEW.t_cr WHERE tblchat.no_acct = NEW.no_acct;
WHEN MONTH(@tanggal) = 2 AND NEW.t_db > 0 THEN
UPDATE tblchat set cr_01 = NEW.t_db WHERE tblchat.no_acct = NEW.no_acct;
ELSE
$$
DELIMITER ;
Saya sudah berhasil pak, update ke tblchatnya.
mau tanya lagi, bagusnya klu mau update ke tblgroup triggernya di sisi
tblchat atau di gabung di tbldtljurnal pak.
key yang dipakai adalah cd_group
tblgroup cd_group C(3), db_01, cr_01
tblchat no_acct C(10), cd_group C(3)
DELIMITER $$
DROP TRIGGER /*!50032 IF EXISTS */ `dblintas`.`tr_insert_jurnal`$$
CREATE
/*!50017 DEFINER = 'root'@'localhost' */
TRIGGER `dblintas`.`tr_insert_jurnal` AFTER INSERT ON `dblintas`.`tbldtljurnal`
FOR EACH ROW BEGIN
SELECT a.tanggal INTO @tanggal FROM tblhdrjurnal AS a
WHERE a.no_dok = NEW.no_dok LIMIT 1;
CASE
WHEN MONTH(@tanggal) = 1 AND NEW.t_db > 0 THEN
UPDATE tblchat set db_01 = db_01 + NEW.t_db WHERE tblchat.no_acct = NEW.no_acct;
WHEN MONTH(@tanggal) = 2 AND NEW.t_db > 0 THEN
UPDATE tblchat set db_02 = db_02 + NEW.t_db WHERE tblchat.no_acct = NEW.no_acct;
/*Kredit*/
WHEN MONTH(@tanggal) = 1 AND NEW.t_cr > 0 THEN
UPDATE tblchat set cr_01 = cr_01 + NEW.t_cr WHERE tblchat.no_acct = NEW.no_acct;
WHEN MONTH(@tanggal) = 2 AND NEW.t_cr > 0 THEN
UPDATE tblchat set cr_02 = cr_02 + NEW.t_cr WHERE tblchat.no_acct = NEW.no_acct;
ELSE
BEGIN END;
END CASE;
END;
$$
DELIMITER ;

mohon maaf jika hal tsb dianggap kurang berkenan.