将varchar,nvarchar2或varchar2与传递给Oracle数据库的QString变量进行比较时遇到问题。
CREATE TABLE Korisnici
(
id_korisnika varchar(200) PRIMARY KEY,
ime_korisnika varchar2(200),
prezime_korisnika varchar2(200),
broj_telefona varchar2(30),
adresa_korisnika varchar2(400)
)
/
这是我的程序:
//procedure for updating user
CREATE OR REPLACE PROCEDURE Update_korisnika(
stari_id IN varchar,
novo_ime_korisnika IN varchar2,
novo_prezime_korisnika IN varchar2,
novi_broj_telefona_korisnika IN varchar2,
nova_adresa_korisnika IN varchar2)
IS
BEGIN
UPDATE Korisnici
SET Korisnici.ime_korisnika=novo_ime_korisnika
, Korisnici.prezime_korisnika=novo_prezime_korisnika
, Korisnici.broj_telefona=novi_broj_telefona_korisnika
, Korisnici.adresa_korisnika=nova_adresa_korisnika
WHERE Korisnici.id_korisnika=stari_id;
COMMIT;
END;
/
我调试时发送char的qt代码:
//this is for updateing user
void MainWindow::promjeni_korisnika(const QString& id, const QString& ime, const QString& prezime, const QString& broj, const QString& adresa)
{
//parametri
init();
QUrl params;
params.addQueryItem("action","Update_korisnika");
params.addQueryItem("id",id);
params.addQueryItem("ime",ime);
params.addQueryItem("prezime",prezime);
params.addQueryItem("broj",broj);
params.addQueryItem("adresa",adresa);
QByteArray data;
data.append(params.toString());
data.remove(0,1);
QNetworkRequest request;
request.setUrl(url);
request.setHeader(QNetworkRequest::ContentTypeHeader,
QVariant("application/x-www-form-urlencoded"));
manager->post(request, data);
MainWindow::dataList.clear();
Citanje_korisnika();
}
所以我只对使用ID的程序有问题,如何使这一切都有效。该ID应该与哪种类型的数据进行比较,以便我可以使用它。
编辑: 这是QML函数,它将数据发送到上面的QT函数:
funkcije.promjeni_korisnika(text_input5.text,text_input1.text,text_input2.text,text_input3.text,text_input4.text);
然后这部分脚本接受数据:
Update_korisnika($poslani_ar,$id=$_POST['id_korisnika'],$ime=$_POST['ime'],$prezime=$_POST['prezime'],$broj=$_POST['broj'],$adresa=$_POST['adresa']);
然后这部分调用此代码:
function Update_korisnika($poslani_ar,$id,$ime,$prezime,$broj,$adresa)
{
$imenik = new Imenik($poslani_ar,$id,$ime,$prezime,$broj,$adresa);
$imenik->Update_korisnika();
}
然后:
function Update_korisnika(){
$query='BEGIN Update_korisnika(:id_korisnika,:ime_korisnika,:prezime_korisnika,:broj_telefona,:adresa);END;';
$result=$this->connector->Exec($this->poslani_argument,$query,$this->id_korisnika,$this->ime_korisnika,$this->prezime_korisnika,$this->broj_telefona,$this->adresa);
//echo $ArrayToXml->toXml($result);
}
并且最后只有执行所有内容的脚本。我没有放任何构造函数和不必要的东西。这是代码的一部分,例如一起工作。
如何在触发PHP时跟踪它。
答案 0 :(得分:2)
“在id_korisnika开头就是数字,然后我试着改变它 as varchar,nvarchar2,varchar2。但是存在某种问题。一世 不知道如何在存储过程中跟踪它。致电时选择* 来自Korisnici的SQL加上我可以看到3号。“
好的,所以你的实际问题是你在一个字符串数据类型中存储一个数字。它可能在查询中看起来像3
,但可能是' 3'
,'3 '
,' 3 '
,'3'
或任何其他三个和空格的排列。
所以,只需要整理你的数据模型。
答案 1 :(得分:1)
让我们从记录发送到存储过程的内容开始。如果您修改存储过程以记录传入的数据并更新行数,您看到了什么?
CREATE TABLE update_proc_log (
id_korisnika varchar2(200),
ime_korisnika varchar2(200),
prezime_korisnika varchar2(200),
broj_telefona varchar2(30),
adresa_korisnika varchar2(400),
rows_updated number,
call_timestamp timestamp
);
CREATE OR REPLACE PROCEDURE Update_korisnika(
stari_id IN varchar,
novo_ime_korisnika IN varchar2,
novo_prezime_korisnika IN varchar2,
novi_broj_telefona_korisnika IN varchar2,
nova_adresa_korisnika IN varchar2)
IS
l_rows_updated integer;
BEGIN
UPDATE Korisnici
SET Korisnici.ime_korisnika=novo_ime_korisnika
, Korisnici.prezime_korisnika=novo_prezime_korisnika
, Korisnici.broj_telefona=novi_broj_telefona_korisnika
, Korisnici.adresa_korisnika=nova_adresa_korisnika
WHERE Korisnici.id_korisnika=stari_id;
l_rows_updated := sql%rowcount;
INSERT INTO update_proc_log( id_korisnika ,
ime_korisnika ,
prezime_korisnika ,
broj_telefona ,
adresa_korisnika ,
rows_updated ,
call_timestamp )
VALUES( stari_id,
novo_ime_korisnika,
novo_prezime_korisnika,
novi_broj_telefona_korisnika,
nova_adresa_korisnika ,
l_rows_updated,
systimestamp );
COMMIT;
END;
/