update DRV_TEMP_MID set ZTBM=p_ZTBM,SHSJ=sysdate where INSTR(','||p_id||',',','||id||',')>0;这个语句是什么意思,重点解析instr在这里是什么意思,谢谢!!!

解决方案 »

  1.   

    instr
    类似于sql server的chaindex你这句的意思就是查询在ID中第一次存在p_id的位置.由于你的ID是以逗号分隔的,所有需要前后都加上逗号.类似于:id = ',1,2,3,4,5,6,10,12'
    p_id = '1'如果不加逗号,则会把1,12,10搞混.
    加上逗号后,则准确了.
      

  2.   

    instr
    类似于sql server的chaindex你这句的意思就是查询在ID中第一次存在p_id的位置.由于你的ID是以逗号分隔的,所有需要前后都加上逗号.类似于:id = '1,2,3,4,5,6,10,12'
    p_id = '1'如果不加逗号,则会把1,12,10搞混.
    加上逗号后,则准确了.
      

  3.   

    instr的详细内容见下:
    1.  INSTR: returns the first-occurrence position of a character within a string   
    SQL>
    SQL>
    SQL> -- create demo table
    SQL> create table Employee(
      2    ID                 VARCHAR2(4 BYTE)         NOT NULL,
      3    First_Name         VARCHAR2(10 BYTE),
      4    Last_Name          VARCHAR2(10 BYTE),
      5    Start_Date         DATE,
      6    End_Date           DATE,
      7    Salary             Number(8,2),
      8    City               VARCHAR2(10 BYTE),
      9    Description        VARCHAR2(15 BYTE)
     10  )
     11  /Table created.SQL>
    SQL> -- prepare data
    SQL> insert into Employee(ID,  First_Name, Last_Name, Start_Date,                     End_Date,                       Salary,  City,       Description)
      2               values ('01','Jason',    'Martin',  to_date('19960725','YYYYMMDD'), to_date('20060725','YYYYMMDD'), 1234.56, 'Toronto',  'Programmer')
      3  /1 row created.SQL> insert into Employee(ID,  First_Name, Last_Name, Start_Date,                     End_Date,                       Salary,  City,       Description)
      2                values('02','Alison',   'Mathews', to_date('19760321','YYYYMMDD'), to_date('19860221','YYYYMMDD'), 6661.78, 'Vancouver','Tester')
      3  /1 row created.SQL> insert into Employee(ID,  First_Name, Last_Name, Start_Date,                     End_Date,                       Salary,  City,       Description)
      2                values('03','James',    'Smith',   to_date('19781212','YYYYMMDD'), to_date('19900315','YYYYMMDD'), 6544.78, 'Vancouver','Tester')
      3  /1 row created.SQL> insert into Employee(ID,  First_Name, Last_Name, Start_Date,                     End_Date,                       Salary,  City,       Description)
      2                values('04','Celia',    'Rice',    to_date('19821024','YYYYMMDD'), to_date('19990421','YYYYMMDD'), 2344.78, 'Vancouver','Manager')
      3  /1 row created.SQL> insert into Employee(ID,  First_Name, Last_Name, Start_Date,                     End_Date,                       Salary,  City,       Description)
      2                values('05','Robert',   'Black',   to_date('19840115','YYYYMMDD'), to_date('19980808','YYYYMMDD'), 2334.78, 'Vancouver','Tester')
      3  /1 row created.SQL> insert into Employee(ID,  First_Name, Last_Name, Start_Date,                     End_Date,                       Salary, City,        Description)
      2                values('06','Linda',    'Green',   to_date('19870730','YYYYMMDD'), to_date('19960104','YYYYMMDD'), 4322.78,'New York',  'Tester')
      3  /1 row created.SQL> insert into Employee(ID,  First_Name, Last_Name, Start_Date,                     End_Date,                       Salary, City,        Description)
      2                values('07','David',    'Larry',   to_date('19901231','YYYYMMDD'), to_date('19980212','YYYYMMDD'), 7897.78,'New York',  'Manager')
      3  /1 row created.SQL> insert into Employee(ID,  First_Name, Last_Name, Start_Date,                     End_Date,                       Salary, City,        Description)
      2                values('08','James',    'Cat',     to_date('19960917','YYYYMMDD'), to_date('20020415','YYYYMMDD'), 1232.78,'Vancouver', 'Tester')
      3  /1 row created.SQL>
    SQL>
    SQL>
    SQL> -- display data in the table
    SQL> select * from Employee
      2  /ID   FIRST_NAME LAST_NAME  START_DAT END_DATE      SALARY CITY       DESCRIPTION
    ---- ---------- ---------- --------- --------- ---------- ---------- ---------------
    01   Jason      Martin     25-JUL-96 25-JUL-06    1234.56 Toronto    Programmer
    02   Alison     Mathews    21-MAR-76 21-FEB-86    6661.78 Vancouver  Tester
    03   James      Smith      12-DEC-78 15-MAR-90    6544.78 Vancouver  Tester
    04   Celia      Rice       24-OCT-82 21-APR-99    2344.78 Vancouver  Manager
    05   Robert     Black      15-JAN-84 08-AUG-98    2334.78 Vancouver  Tester
    06   Linda      Green      30-JUL-87 04-JAN-96    4322.78 New York   Tester
    07   David      Larry      31-DEC-90 12-FEB-98    7897.78 New York   Manager
    08   James      Cat        17-SEP-96 15-APR-02    1232.78 Vancouver  Tester8 rows selected.SQL>
    SQL>
    SQL>
    SQL>
    SQL>
    SQL>
    SQL> --INSTR: returns the first-occurrence position of a character within a string.
    SQL> --it returns a numeric value.
    SQL>
    SQL> --If it does not find the character value, it returns a 0. For example:
    SQL>
    SQL> SELECT First_name, INSTR(First_name,'a') AS INSTR FROM Employee;FIRST_NAME      INSTR
    ---------- ----------
    Jason               2
    Alison              0
    James               2
    Celia               5
    Robert              0
    Linda               5
    David               2
    James               28 rows selected.SQL>
    SQL>
    SQL>
    SQL>
    SQL>
    SQL>
    SQL>
    SQL>
    SQL> -- clean the table
    SQL> drop table Employee
      2  /Table dropped.SQL>
    SQL>
    SQL>
    SQL>2.  Simple demo for INSTR function: returns a location within the string where search pattern begins   
    SQL> --INSTR: returns a location within the string where search pattern begins.
    SQL>
    SQL>
    SQL> SELECT INSTR('This is a test','is') FROM dual;INSTR('THISISATEST','IS')
    -------------------------
                            3SQL>
    SQL>3.  INSTR: Look for the second occurrence of 'is'   
    SQL>
    SQL>
    SQL> -- Look for the second occurrence of "is,"
    SQL>
    SQL> SELECT INSTR('This is a test','is',1,2) FROM dual;INSTR('THISISATEST','IS',1,2)
    -----------------------------
                                6SQL>
    SQL>
    SQL>4.  If search pattern is not in the string, the INSTR function returns 0   
    SQL>
    SQL>
    SQL> -- If search pattern is not in the string, the INSTR function returns 0:
    SQL>
    SQL> SELECT INSTR('This is a test','abc',1,2) FROM dual;INSTR('THISISATEST','ABC',1,2)
    ------------------------------
                                 05.  Combine INSTR and SUBSTR together   
    SQL>
    SQL>
    SQL> SELECT SUBSTR('aaa, bb ccc', INSTR('aaa, bb ccc',', ')) FROM dual;SUBSTR('
    --------
    , bb ccc6.  If the INSTR pattern is not found, then the entire string would be returned SQL>
    SQL> -- If the INSTR pattern is not found, then the entire string would be returned
    SQL>
    SQL> SELECT SUBSTR('aaa bbb c', INSTR('aaa bbb c','zonk')) FROM dual;SUBSTR('A
    ---------
    aaa bbb c
      

  4.   

    修改  其中','||p_id||','包含','||id||','的数据的值