我用 C 在 Qt 中開發
我已將 ORACLE 連接到 Qt Creator。
但是當我在 Qt 中呼叫 PROCEDURE 時,我收到了這個錯誤“ORA-06576: not a valid function or procedure name”
我寫了這樣的代碼
程式***
CREATE OR REPLACE PROCEDURE INPUT_CUSTOMER
(
ck IN NUMBER ,
clinic IN varchar2,
dentist IN varchar2,
license IN varchar2,
number_c IN varchar2,
amount IN NUMBER
)
IS
BEGIN
INSERT INTO CUSTOMER c(c.CUSTOMER_KEY, c.CLINIC_NAME, c.LICENSE_NUMBER, c.DENTIST_NAME, c.PHONE_NUMBER, c.ORDER_AMOUNT)
VALUES (ck, clinic, license, dentist, number_c, amount);
COMMIT;
END INPUT_CUSTOMER ;
Qt中的代碼***
QSqlQueryModel *inputQuery = new QSqlQueryModel;
inputQuery->setQuery
(QString("CALL INPUT_CUSTOMER (%1, %2, %3, %4, %5, %6)")
.arg(ck).arg(clinic).arg(license).arg(dentist).arg(number).arg(0));
if (inputQuery->lastError().isValid())
qDebug() << inputQuery->lastError();
請檢查我的代碼
ss
uj5u.com熱心網友回復:
你的程式沒問題。
您的 QT 代碼正在使用模板字串和字串連接構建查詢,這是錯誤的原因(并且是不好的做法,因為它會導致 SQL 注入漏洞)。
相反,您應該使用系結變數構建查詢:
QSqlQuery query(db);
query.prepare("CALL INPUT_CUSTOMER (:ck, :clinic, :license, :dentist, :number, :amount)");
query.setForwardOnly(true);
query.bindValue(":ck", ck);
query.bindValue(":clinic", clinic);
query.bindValue(":license", license);
query.bindValue(":dentist", dentist);
query.bindValue(":number", number);
query.bindValue(":amount", 0);
bool query_executed_ok = query.exec();
(我不是 QT 開發人員,這是從檔案和其他類似問題的答案中獲取的,因此可能存在語法錯誤,但它旨在為您提供正確程序的指南并允許您修復 QT 問題。)
另請注意:
如果您有三個PROCEDURE并且每個都包含一個COMMIT陳述句,那么您不能運行所有三個,然后,如果在后一個中發生例外,則ROLLBACK它們都將作為前兩個的更改已經完成COMMIT。
作為一般規則,您不應該COMMIT在 a 中使用PROCEDURE或FUNCTION,而應該將其留給COMMIT事務的呼叫者,以便他們可以將多個操作捆綁在一起。
相反,您應該COMMIT在事務完成后進入 QT。
您還可以在程序中使用列資料型別:
CREATE OR REPLACE PROCEDURE INPUT_CUSTOMER
(
ck IN CUSTOMER.CUSTOMER_KEY%TYPE,
clinic IN CUSTOMER.CLINIC_NAME%TYPE,
dentist IN CUSTOMER.LICENSE_NUMBER%TYPE,
license IN CUSTOMER.DENTIST_NAME%TYPE,
number_c IN CUSTOMER.PHONE_NUMBER%TYPE,
amount IN CUSTOMER.ORDER_AMOUNT%TYPE
)
IS
BEGIN
INSERT INTO CUSTOMER(CUSTOMER_KEY, CLINIC_NAME, LICENSE_NUMBER, DENTIST_NAME, PHONE_NUMBER, ORDER_AMOUNT)
VALUES (ck, clinic, license, dentist, number_c, amount);
END INPUT_CUSTOMER;
/
小提琴
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/530182.html
標籤:sql甲骨文qt
上一篇:如何在構建應用程式時在AndriodStudio中修復“找不到模塊的編譯目標android-30:app”錯誤?
