pro*c通过rowid操作数据

  关于rowid可以看一下上一篇

http://blog.csdn.net/rookie_ceo/article/details/15340389

在数据库里面下面这三种写法都可以,但是在pro*c里面,第二种写法不行,会报ORA-01410: invalid ROWID的错误,这个还需要再看看。遇到这种问题的兄弟,欢迎讨论。

个人觉得应该不会是和坏块有关,这个确实是因为输入的rowid有问题。因为通过下面语句可以运行出来(因为编译的时候用了plsql块,所以编译的时候要带上 sqlcheck=full userid=ss/ppwd@ssname)。在最后附上详细的代码,均已解决。

                    sprintf(v_sql,"select ROWIDTOCHAR(rowid) vrowid,id from t_rover_alert where rowid=trim('%s')",v_rowid);
                    printf("v_sql=%s\n",v_sql );
                    EXEC SQL EXECUTE
                    BEGIN
                       execute immediate :v_sql INTO :v_rowid2,:v_id2 ;
                    EXCEPTION
                       WHEN NO_DATA_FOUND THEN :MSG := 'NO_DATA_FOUND';
                       WHEN OTHERS THEN :MSG := SUBSTR(SQLERRM, 1, 100);
                    END;
                    END-EXEC;
                    printf("[%s]main_pid=%d,v_rowid=%s,v_id2=81=%d,msg=%s\n",str_nows,main_pid,v_rowid2,v_id2,MSG);  
执行的结果如下,看"v_id=81="。
[2013-11-13 15:06:14]main_pid=7627,v_rowid=,v_id2=8=-1313050906,msg= 
v_sql=select ROWIDTOCHAR(rowid) vrowid,id from t_rover_alert where rowid='AAA5eEAAFAAABS6AAp                                             '
v_sql=select ROWIDTOCHAR(rowid) vrowid,id from t_rover_alert where rowid=trim('AAA5eEAAFAAABS6AAp                                             ')
[2013-11-13 15:06:14]main_pid=7627,v_rowid=AAA5eEAAFAAABS6AAp                                             ,v_id2=81=268023,msg= 



关于坏块的连接

http://www.xifenfei.com/1092.html

http://yangtingkun.itpub.net/post/468/41460


select ROWIDTOCHAR(rowid) vrowid ,id   from t_rover_alert where rowid=chartorowid('AAA5eEAAFAAABS2AAk');
select ROWIDTOCHAR(rowid) vrowid ,id   from t_rover_alert where rowid='AAA5eEAAFAAABS2AAk';
select ROWIDTOCHAR(rowid) vrowid,id  from t_rover_alert where ROWIDTOCHAR(rowid)=trim('AAA5eEAAFAAABS2AAk');


[sms@db proc_demo]$ proc iname=rowid_demo.pc oname=rowid_demo.c parse=full include=$ORACLE_HOME/rdbms/public include=$ORACLE_HOME/precomp/public include=/usr/lib

Pro*C/C++: Release 10.2.0.1.0 - Production on Mon Nov 11 17:54:27 2013

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

System default option values taken from: /u01/app/oracle/product/10.2.0/client_1/precomp/admin/pcscfg.cfg

[sms@db proc_demo]$ gcc -g -o rowid_demo rowid_demo.c -I $ORACLE_HOME/rdbms/public -I $ORACLE_HOME/precomp/public -L $ORACLE_HOME/lib -l clntsh
[sms@db proc_demo]$ ./rowid_demo
[2013-11-11 17:54:34]main_pid=567,connect sucess
[2013-11-11 17:54:34]main_pid=567,v_rowid=AAA5eEAAFAAABS6AAp             ,v_id=1=268023
[2013-11-11 17:54:34]main_pid=567,v_rowid=AAA5eEAAFAAABS6AAp             ,v_id1=2=268023
[2013-11-11 17:54:34]ppid=567,error sql:select id into :b0  from t_rover_alert where rowid=:b1
[2013-11-11 17:54:34]ppid=567,error msg:ORA-01410: invalid ROWID

[2013-11-11 17:54:34]main_pid=567,v_rowid=`3P>+,v_id2=3=32767
[2013-11-11 17:54:34]main_pid=567,v_rowid=AAA5eEAAFAAABS6AAp             ,v_id3=4=268023

下面是源代码

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sqlca.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <sys/ipc.h>
#include <sys/shm.h> 
#include <unistd.h>
#include <assert.h>
#include <errno.h>
#include <signal.h>
#include <sql2oci.h>
#include <time.h>
#include <sys/time.h>

void sql_error();
void SignHandler(int isignNum);
void getlocaltime(char tmpbuf[32]);

int main(int argc,char *argv[])
{
   EXEC SQL WHENEVER SQLERROR DO sql_error();
   signal(SIGINT,SignHandler);
   
   char str_nows[32];           
   int main_pid=getpid();
   char *ora_user="ydqxn";
   char *ora_pwd="ydqxn";
   char *ora_sname="ydqx";
   EXEC SQL connect :ora_user identified by :ora_pwd using :ora_sname;
   getlocaltime(str_nows);
   if(sqlca.sqlcode == 0)
    {
    	printf("[%s]main_pid=%d,connect sucess\n",str_nows,main_pid);
    	OCIRowid *alert_rowid;
    	char v_rowid[32],v_rowid1[32],v_rowid2[32],v_rowid3[32];
    	int v_id,v_id1,v_id2,v_id3;
        EXEC SQL DECLARE cur_alertmsg CURSOR FOR 
        select rowid rrid,ROWIDTOCHAR(rowid) vrowid,id  from t_rover_alert where rownum<=5;
        EXEC SQL OPEN cur_alertmsg;
        //EXEC SQL WHENEVER NOT FOUND DO break;
        EXEC SQL ALLOCATE :alert_rowid;
        getlocaltime(str_nows);
        int i=1;
        while(i<=5){
                    EXEC SQL FETCH cur_alertmsg INTO :alert_rowid,:v_rowid,:v_id;
                    //printf("alert_rowid=1=%s\n",alert_rowid);
                    //printf("alert_rowid=2=%p\n",alert_rowid);
                    printf("[%s]main_pid=%d,v_rowid=%s,v_id=1=%d\n",str_nows,main_pid,v_rowid,v_id);
                    EXEC SQL select ROWIDTOCHAR(rowid) vrowid,id into v_rowid1,v_id1 from t_rover_alert where rowid=:alert_rowid;
                    printf("[%s]main_pid=%d,v_rowid=%s,v_id1=2=%d\n",str_nows,main_pid,v_rowid1,v_id1);
                    //EXEC SQL select ROWIDTOCHAR(rowid) vrowid,id into v_rowid2,v_id2 from t_rover_alert where rowid=CHARTOROWID(:v_rowid);
                    //EXEC SQL select ROWIDTOCHAR(rowid) vrowid,id into v_rowid2,v_id2 from t_rover_alert where rowid=:v_rowid;
                    EXEC SQL select id into v_id2 from t_rover_alert where rowid=:v_rowid;
                    printf("[%s]main_pid=%d,v_rowid=%s,v_id2=3=%d\n",str_nows,main_pid,v_rowid2,v_id2);  
                    EXEC SQL select ROWIDTOCHAR(rowid) vrowid,id into v_rowid3,v_id3 from t_rover_alert where ROWIDTOCHAR(rowid)=trim(:v_rowid);
                    printf("[%s]main_pid=%d,v_rowid=%s,v_id3=4=%d\n\n",str_nows,main_pid,v_rowid3,v_id3);   
                    i++;                                   
                }
        EXEC SQL COMMIT ;
        EXEC SQL FREE :alert_rowid;
        EXEC SQL CLOSE cur_alertmsg;
    }
    else
    {
    	printf("[%s]main_pid=%d,connect fail\n",str_nows,main_pid);
    }
   exit(EXIT_SUCCESS);
   return 0;
} 
void sql_error()
{
    char stm[512];
    size_t sqlfc,stmlen=512;
    int ppid=getpid();
    char str_nows[32]; 
    
    getlocaltime(str_nows);
    sqlgls(stm,&stmlen,&sqlfc);
    printf("[%s]ppid=%d,error sql:%.*s\n",str_nows,ppid,stmlen,stm);
    printf("[%s]ppid=%d,error msg:%.*s\n",str_nows,ppid,sqlca.sqlerrm.sqlerrml,sqlca.sqlerrm.sqlerrmc);
    EXEC SQL WHENEVER SQLERROR CONTINUE;
    EXEC SQL ROLLBACK;
}
void SignHandler(int isignNum)
{
    int ppid=getpid();
    char str_nows[32]; 

    getlocaltime(str_nows);
    printf("[%s]ppid=%d,signal=%d,begin rollback.\n",str_nows,ppid,isignNum);
    EXEC SQL ROLLBACK WORK RELEASE;
    getlocaltime(str_nows);
    printf("[%s]ppid=%d,signal=%d,end rollback.\n",str_nows,ppid,isignNum);
    exit(EXIT_FAILURE);
}
void getlocaltime(char tmpbuf[32])
{
     struct tm *newtime;
     time_t lt1;
     lt1 = time(NULL);
     newtime=localtime(<1);

     strftime(tmpbuf, 32, "%F %H:%M:%S", newtime);
} 


=======正确的代码

[sms@db proc_demo]$ cat rowid_demo.pc 
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sqlca.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <sys/ipc.h>
#include <sys/shm.h> 
#include <unistd.h>
#include <assert.h>
#include <errno.h>
#include <signal.h>
#include <sql2oci.h>
#include <time.h>
#include <sys/time.h>

void sql_error();
void SignHandler(int isignNum);
void getlocaltime(char tmpbuf[32]);

int main(int argc,char *argv[])
{
   EXEC SQL WHENEVER SQLERROR DO sql_error();
   signal(SIGINT,SignHandler);
   
   char str_nows[32];           
   int main_pid=getpid();
   char *ora_user="ydqxn";
   char *ora_pwd="ydqxn";
   char *ora_sname="ydqx";
   EXEC SQL connect :ora_user identified by :ora_pwd using :ora_sname;
   getlocaltime(str_nows);
   if(sqlca.sqlcode == 0)
    {
        printf("[%s]main_pid=%d,connect sucess\n",str_nows,main_pid);
        OCIRowid *alert_rowid;
        char v_rowid[32],v_rowid1[32],v_rowid2[32],v_rowid3[32];
        char v_rowid4[32],v_rowid5[32],v_rowid6[32],v_rowid7[32];
        char v_rowid8[32],v_rowid9[32],v_rowid10[32],v_rowid11[32],v_rowid12[32];
        long v_id,v_id1,v_id2,v_id3;
        long v_id4,v_id5,v_id6,v_id7;
        long v_id8,v_id9,v_id10,v_id11,v_id12;
        EXEC SQL DECLARE cur_alertmsg CURSOR FOR 
        select rowid rrid,ROWIDTOCHAR(rowid) vrowid,id  from t_rover_alert where rownum<=2;
        EXEC SQL OPEN cur_alertmsg;
        //EXEC SQL WHENEVER NOT FOUND DO break;
        EXEC SQL ALLOCATE :alert_rowid;
        getlocaltime(str_nows);
        printf("[%s]main_pid=%d,rowcnt=1=%d\n",str_nows,main_pid,sqlca.sqlerrd[2]);
        int i=1;
        while(i<=2){
                    EXEC SQL FETCH cur_alertmsg INTO :alert_rowid,:v_rowid,:v_id;
                    //printf("alert_rowid=1=%s\n",alert_rowid);
                    //printf("alert_rowid=2=%p\n",alert_rowid);
                    printf("[%s]main_pid=%d,rowcnt=2=%d\n",str_nows,main_pid,sqlca.sqlerrd[2]);
                    printf("[%s]main_pid=%d,v_rowid=%s,v_id=1=%d\n",str_nows,main_pid,v_rowid,v_id);
                    EXEC SQL select ROWIDTOCHAR(rowid) vrowid,id into v_rowid1,v_id1 from t_rover_alert where rowid=:alert_rowid;
                    printf("[%s]main_pid=%d,v_rowid=%s,v_id1=2=%d\n",str_nows,main_pid,v_rowid1,v_id1);
                    EXEC SQL select ROWIDTOCHAR(rowid) vrowid,id into v_rowid2,v_id2 from t_rover_alert where rowid=CHARTOROWID(trim(:v_rowid));
                    //EXEC SQL select ROWIDTOCHAR(rowid) vrowid,id into v_rowid2,v_id2 from t_rover_alert where rowid=:v_rowid;
                    //EXEC SQL select id into v_id2 from t_rover_alert where rowid=:v_rowid;
                    printf("[%s]main_pid=%d,v_rowid=%s,v_id2=3=%d\n",str_nows,main_pid,v_rowid2,v_id2);  
                    EXEC SQL select ROWIDTOCHAR(rowid) vrowid,id into v_rowid3,v_id3 from t_rover_alert where ROWIDTOCHAR(rowid)=trim(:v_rowid);
                    printf("[%s]main_pid=%d,v_rowid=%s,v_id3=4=%d\n",str_nows,main_pid,v_rowid3,v_id3);
                    EXEC SQL select ROWIDTOCHAR(rowid) vrowid,id into v_rowid12,v_id12 from t_rover_alert where rowid=trim(:v_rowid);
                    printf("[%s]main_pid=%d,v_rowid=%s,v_id3=4=%d\n",str_nows,main_pid,v_rowid12,v_id12);

                    //dynamic_sql
                    EXEC SQL PREPARE stat FROM 'select ROWIDTOCHAR(rowid) vrowid,id  from t_rover_alert where rowid=trim(:a)';
                    EXEC SQL DECLARE c1 CURSOR FOR stat;
                    EXEC SQL OPEN c1 USING :v_rowid;
                    EXEC SQL FETCH c1 INTO :v_rowid4,:v_id4;
                    EXEC SQL CLOSE c1;
                    printf("[%s]main_pid=%d,v_rowid=%s,v_id2=5=%d,cnt=%d\n",str_nows,main_pid,v_rowid4,v_id4,sqlca.sqlerrd[2]);

                    //dynamic_sql
                    char vv_sql[2000];
                    strcpy(vv_sql,"select ROWIDTOCHAR(rowid) vrowid,id  from t_rover_alert where rowid=CHARTOROWID(trim(:a))");
                    EXEC SQL PREPARE stat1 FROM :vv_sql;
                    EXEC SQL DECLARE c2 CURSOR FOR stat1;
                    EXEC SQL OPEN c2 USING :v_rowid;
                    EXEC SQL FETCH c2 INTO :v_rowid5,:v_id5;
                    EXEC SQL CLOSE c2;
                    printf("[%s]main_pid=%d,v_rowid=%s,v_id2=6=%d,cnt=%d\n",str_nows,main_pid,v_rowid5,v_id5,sqlca.sqlerrd[2]);

                    //plsql
                    char *MSG=" ";
                    EXEC SQL EXECUTE
                    BEGIN
                       select ROWIDTOCHAR(rowid) vrowid,id into :v_rowid6,:v_id6  from t_rover_alert where rowid=trim(:v_rowid);
                    EXCEPTION
                       WHEN NO_DATA_FOUND THEN :MSG := 'NO_DATA_FOUND';
                       WHEN OTHERS THEN :MSG := SUBSTR(SQLERRM, 1, 100);
                    END;
                    END-EXEC;
                    printf("[%s]main_pid=%d,v_rowid=%s,v_id2=7=%d,msg=%s\n",str_nows,main_pid,v_rowid6,v_id6,MSG);  

                    //plsql
                    EXEC SQL EXECUTE
                    BEGIN
                       execute immediate 'select ROWIDTOCHAR(rowid) vrowid,id from t_rover_alert where rowid=trim(:1)' INTO :v_rowid7,:v_id7  USING :v_rowid;
                    EXCEPTION
                       WHEN NO_DATA_FOUND THEN :MSG := 'NO_DATA_FOUND';
                       WHEN OTHERS THEN :MSG := SUBSTR(SQLERRM, 1, 100);
                    END;
                    END-EXEC;
                    printf("[%s]main_pid=%d,v_rowid=%s,v_id2=8=%d,msg=%s\n",str_nows,main_pid,v_rowid7,v_id7,MSG);  

                    //plsql
                    char v_sql[2000];
                    sprintf(v_sql,"select ROWIDTOCHAR(rowid) vrowid,id from t_rover_alert where rowid='%s'",v_rowid);
                    //printf("v_sql=%s\n",v_sql );
                    
                    sprintf(v_sql,"select ROWIDTOCHAR(rowid) vrowid,id from t_rover_alert where rowid=trim('%s')",v_rowid);
                    //printf("v_sql=%s\n",v_sql );
                    EXEC SQL EXECUTE
                    BEGIN
                       execute immediate :v_sql INTO :v_rowid8,:v_id8 ;
                    EXCEPTION
                       WHEN NO_DATA_FOUND THEN :MSG := 'NO_DATA_FOUND';
                       WHEN OTHERS THEN :MSG := SUBSTR(SQLERRM, 1, 100);
                    END;
                    END-EXEC;
                    printf("[%s]main_pid=%d,v_rowid=%s,v_id2=81=%d,msg=%s\n",str_nows,main_pid,v_rowid8,v_id8,MSG);  

                    strcpy(v_sql,"select ROWIDTOCHAR(rowid) vrowid,id from t_rover_alert where rowid=trim(:a)");
                    printf("v_sql=%s\n",v_sql );
                    EXEC SQL EXECUTE
                    BEGIN
                       execute immediate :v_sql INTO :v_rowid9,:v_id9 USING :v_rowid;
                    EXCEPTION
                       WHEN NO_DATA_FOUND THEN :MSG := 'NO_DATA_FOUND';
                       WHEN OTHERS THEN :MSG := SUBSTR(SQLERRM, 1, 100);
                    END;
                    END-EXEC;
                    printf("[%s]main_pid=%d,v_rowid=%s,v_id2=83=%d,msg=%s\n",str_nows,main_pid,v_rowid9,v_id9,MSG);  

                    //plsql
                    EXEC SQL EXECUTE
                    BEGIN
                       execute immediate 'select ROWIDTOCHAR(rowid) vrowid,id from t_rover_alert where rowid=CHARTOROWID(trim(:1))' INTO :v_rowid10,:v_id10  USING :v_rowid;
                    EXCEPTION
                       WHEN NO_DATA_FOUND THEN :MSG := 'NO_DATA_FOUND';
                       WHEN OTHERS THEN :MSG := SUBSTR(SQLERRM, 1, 100);
                    END;
                    END-EXEC;
                    printf("[%s]main_pid=%d,v_rowid=%s,v_id2=9=%d,msg=%s\n",str_nows,main_pid,v_rowid10,v_id10,MSG); 

                    //dynamic_sql
                    sprintf(v_rowid,"t_rover_alert");
                    EXEC SQL PREPARE stat2 FROM 'select table_name,pct_free  from user_tables where table_name=upper(trim(:a))';
                    EXEC SQL DECLARE c3 CURSOR FOR stat2;
                    EXEC SQL OPEN c3 USING :v_rowid;
                    EXEC SQL FETCH c3 INTO :v_rowid11,:v_id11;
                    EXEC SQL CLOSE c3;
                    printf("[%s]main_pid=%d,v_rowid=%s,v_id2=10=%d,cnt=%d\n\n",str_nows,main_pid,v_rowid11,v_id11,sqlca.sqlerrd[2]);

                    i++;                                   
                }
        printf("[%s]main_pid=%d,rowcnt=3=%d\n",str_nows,main_pid,sqlca.sqlerrd[2]);
        EXEC SQL COMMIT ;
        EXEC SQL FREE :alert_rowid;
        EXEC SQL CLOSE cur_alertmsg;
        printf("[%s]main_pid=%d,rowcnt=4=%d\n",str_nows,main_pid,sqlca.sqlerrd[2]);
    }
    else
    {
        printf("[%s]main_pid=%d,connect fail\n",str_nows,main_pid);
    }
   exit(EXIT_SUCCESS);
   return 0;
} 
void sql_error()
{
    char stm[100];
    size_t sqlfc,stmlen=100;
    int ppid=getpid();
    char str_nows[32]; 
    
    getlocaltime(str_nows);
    sqlgls(stm,&stmlen,&sqlfc);
    printf("[%s]ppid=%d,error sql:%.*s\n",str_nows,ppid,stmlen,stm);
    printf("[%s]ppid=%d,error msg:%.*s\n",str_nows,ppid,sqlca.sqlerrm.sqlerrml,sqlca.sqlerrm.sqlerrmc);
    EXEC SQL WHENEVER SQLERROR CONTINUE;
    EXEC SQL ROLLBACK;
}
void SignHandler(int isignNum)
{
    int ppid=getpid();
    char str_nows[32]; 

    getlocaltime(str_nows);
    printf("[%s]ppid=%d,signal=%d,begin rollback.\n",str_nows,ppid,isignNum);
    EXEC SQL ROLLBACK WORK RELEASE;
    getlocaltime(str_nows);
    printf("[%s]ppid=%d,signal=%d,end rollback.\n",str_nows,ppid,isignNum);
    exit(EXIT_FAILURE);
}
void getlocaltime(char tmpbuf[32])
{
     struct tm *newtime;
     time_t lt1;
     lt1 = time(NULL);
     newtime=localtime(<1);

     strftime(tmpbuf, 32, "%F %H:%M:%S", newtime);
} 
[sms@db proc_demo]$  proc iname=rowid_demo.pc oname=rowid_demo.c parse=full include=$ORACLE_HOME/rdbms/public include=$ORACLE_HOME/precomp/public include=/usr/lib sqlcheck=full userid=ydqxn/ydqxn@ydqx

Pro*C/C++: Release 10.2.0.1.0 - Production on Wed Nov 13 18:11:13 2013

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

System default option values taken from: /u01/app/oracle/product/10.2.0/client_1/precomp/admin/pcscfg.cfg

[sms@db proc_demo]$ gcc -g -o rowid_demo rowid_demo.c -I $ORACLE_HOME/rdbms/public -I $ORACLE_HOME/precomp/public -L $ORACLE_HOME/lib -l clntsh
[sms@db proc_demo]$ ./rowid_demo 
[2013-11-13 18:11:21]main_pid=8183,connect sucess
[2013-11-13 18:11:21]main_pid=8183,rowcnt=1=0
[2013-11-13 18:11:21]main_pid=8183,rowcnt=2=1
[2013-11-13 18:11:21]main_pid=8183,v_rowid=AAA5eEAAFAAABS6AAp             ,v_id=1=268023
[2013-11-13 18:11:21]main_pid=8183,v_rowid=AAA5eEAAFAAABS6AAp             ,v_id1=2=268023
[2013-11-13 18:11:21]main_pid=8183,v_rowid=AAA5eEAAFAAABS6AAp             ,v_id2=3=268023
[2013-11-13 18:11:21]main_pid=8183,v_rowid=AAA5eEAAFAAABS6AAp             ,v_id3=4=268023
[2013-11-13 18:11:21]main_pid=8183,v_rowid=AAA5eEAAFAAABS6AAp             ,v_id3=4=268023
[2013-11-13 18:11:21]main_pid=8183,v_rowid=AAA5eEAAFAAABS6AAp             ,v_id2=5=268023,cnt=1
[2013-11-13 18:11:21]main_pid=8183,v_rowid=AAA5eEAAFAAABS6AAp             ,v_id2=6=268023,cnt=1
[2013-11-13 18:11:21]main_pid=8183,v_rowid=AAA5eEAAFAAABS6AAp             ,v_id2=7=268023,msg= 
[2013-11-13 18:11:21]main_pid=8183,v_rowid=AAA5eEAAFAAABS6AAp             ,v_id2=8=268023,msg= 
[2013-11-13 18:11:21]main_pid=8183,v_rowid=AAA5eEAAFAAABS6AAp             ,v_id2=81=268023,msg= 
v_sql=select ROWIDTOCHAR(rowid) vrowid,id from t_rover_alert where rowid=trim(:a)
[2013-11-13 18:11:21]main_pid=8183,v_rowid=AAA5eEAAFAAABS6AAp             ,v_id2=83=268023,msg= 
[2013-11-13 18:11:21]main_pid=8183,v_rowid=AAA5eEAAFAAABS6AAp             ,v_id2=9=268023,msg= 
[2013-11-13 18:11:21]main_pid=8183,v_rowid=T_ROVER_ALERT                  ,v_id2=10=10,cnt=1

[2013-11-13 18:11:21]main_pid=8183,rowcnt=2=2
[2013-11-13 18:11:21]main_pid=8183,v_rowid=AAA5eEAAFAAABS6AAu             ,v_id=1=268040
[2013-11-13 18:11:21]main_pid=8183,v_rowid=AAA5eEAAFAAABS6AAu             ,v_id1=2=268040
[2013-11-13 18:11:21]main_pid=8183,v_rowid=AAA5eEAAFAAABS6AAu             ,v_id2=3=268040
[2013-11-13 18:11:21]main_pid=8183,v_rowid=AAA5eEAAFAAABS6AAu             ,v_id3=4=268040
[2013-11-13 18:11:21]main_pid=8183,v_rowid=AAA5eEAAFAAABS6AAu             ,v_id3=4=268040
[2013-11-13 18:11:21]main_pid=8183,v_rowid=AAA5eEAAFAAABS6AAu             ,v_id2=5=268040,cnt=1
[2013-11-13 18:11:21]main_pid=8183,v_rowid=AAA5eEAAFAAABS6AAu             ,v_id2=6=268040,cnt=1
[2013-11-13 18:11:21]main_pid=8183,v_rowid=AAA5eEAAFAAABS6AAu             ,v_id2=7=268040,msg= 
[2013-11-13 18:11:21]main_pid=8183,v_rowid=AAA5eEAAFAAABS6AAu             ,v_id2=8=268040,msg= 
[2013-11-13 18:11:21]main_pid=8183,v_rowid=AAA5eEAAFAAABS6AAu             ,v_id2=81=268040,msg= 
v_sql=select ROWIDTOCHAR(rowid) vrowid,id from t_rover_alert where rowid=trim(:a)
[2013-11-13 18:11:21]main_pid=8183,v_rowid=AAA5eEAAFAAABS6AAu             ,v_id2=83=268040,msg= 
[2013-11-13 18:11:21]main_pid=8183,v_rowid=AAA5eEAAFAAABS6AAu             ,v_id2=9=268040,msg= 
[2013-11-13 18:11:21]main_pid=8183,v_rowid=T_ROVER_ALERT                  ,v_id2=10=10,cnt=1

[2013-11-13 18:11:21]main_pid=8183,rowcnt=3=1
[2013-11-13 18:11:21]main_pid=8183,rowcnt=4=1
[sms@db proc_demo]$ 




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

-无-为-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值