rah*_*uka 2 database error-handling triggers yii2
这是我的触发器
CREATE OR REPLACE TRIGGER trg_cek_pengurus
BEFORE INSERT ON tbl_pengurus
FOR EACH ROW
DECLARE
v_cek NUMBER(2);
BEGIN
IF :NEW.jabatan = 1 OR :NEW.jabatan = 2 THEN
select count(id)
into v_cek
from tbl_pengurus
where idkoperasi = :NEW.idkoperasi and jabatan = :NEW.jabatan;
IF v_cek > 0 THEN
RAISE_APPLICATION_ERROR (-20000, 'kepengurusan sudah ada');
END IF;
END IF;
END;
/
Run Code Online (Sandbox Code Playgroud)
nah ..,如果触发器有一个返回值是好的,:v但它不是:v所以我设置RAISE_APPLICATION_ERROR
这是我的控制者
public function actionTambahPengurus()
{
$model = new Pengurus();
if ($model->load(Yii::$app->request->post())){
$model->IDKOPERASI = Yii::$app->user->identity->ID;
if($model->save())
return $this->redirect('kepengurusan');
}
return $this->render('tambah-pengurus',[
'model' => $model,
]);
}
Run Code Online (Sandbox Code Playgroud)
然后我得到错误
SQLSTATE[HY000]: General error: 20000 OCIStmtExecute: ORA-20000: kepengurusan sudah ada
ORA-06512: at "DB_KOPERASI.TRG_CEK_PENGURUS", line 13
ORA-04088: error during execution of trigger 'DB_KOPERASI.TRG_CEK_PENGURUS'
(ext\pdo_oci\oci_statement.c:148)
The SQL being executed was: INSERT INTO "TBL_PENGURUS" ("NIK", "NAMA", "JABATAN", "EMAIL", "TGL_LAHIR", "ALAMAT", "TELEPON", "IDKOPERASI") VALUES ('2110131041', 'Rahmat Heru Kurniawan', 1, 'rahmatheruka2@gmail.com2', '3 July, 2015', 'sidoarjo', '0987654321', 8) RETURNING "ID" INTO :qp8
Run Code Online (Sandbox Code Playgroud)
这很好,因为这告诉我触发器正在工作但当然这对我的网站来说很糟糕.所以我想处理这个问题,我尝试了谷歌的各种方式,但没有任何作用.请..有谁可以帮助我?
据我记忆,任何与数据库相关的错误都会抛出yii\db\Exception.您可以使用标准try/ catch块来处理:
try {
...
} catch (\yii\db\Exception $e) {
...
}
Run Code Online (Sandbox Code Playgroud)