用C++在Qt中进行即时通讯开发
我已将ORACLE连接到Qt Creator。
但是当我在Qt中调用PROCEDURE时,我收到了以下错误“ORA-06576:不是有效的函数或过程名“
我写了如下代码
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 ;
数量中的代码**
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();
请检查我的代码
标准秒
1条答案
按热度按时间gr8qqesn1#
你的手术没问题。
您的QT代码使用模板字符串和字符串串联构建查询,这就是错误的原因(这是一种不好的做法,因为它会导致SQL注入漏洞)。
相反,您应该使用绑定变量构建查询:
另请注意:
如果你有三个
PROCEDURE
,每个都包含一个COMMIT
语句,那么你不能运行所有的三个,然后,如果在后一个中发生异常,ROLLBACK
它们全部,因为前两个的更改已经是COMMIT
了。作为一般规则,不应在
PROCEDURE
或FUNCTION
中使用COMMIT
,而应将其留给事务的COMMIT
调用方,以便它们可以将多个操作捆绑在一起。相反,当交易完成时,您应该在QT中输入
COMMIT
。您也可以在程序中使用数据行资料类型:
fiddle