将(varchar、nvarchar2、varchar2)与QString进行比较

Comparing (varchar, nvarchar2,varchar2) with QString

本文关键字:QString 比较 varchar2 varchar nvarchar2      更新时间:2023-10-16

将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;
   /

和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被触发时,我如何跟踪它。

"一开始id_korisnika是数字,然后我试图改变它作为varchar、nvarchar2、varchar2。但也存在某种问题。我不知道如何在存储过程中跟踪它。调用select时*从SQL中的Korisnici,我可以看到数字3。"

好吧,那么你的实际问题是你把一个数字存储在一个字符串数据类型中。它可能看起来像查询中的3,但它可能是' 3''3 '' 3 ''3'或任何其他三和空间的排列。

所以,只要整理一下你的数据模型。

让我们从记录发送到存储过程的内容开始。如果您修改存储过程以记录传入的数据和更新的行数,您会看到什么?

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;
/