- like в запросе через OCI, perece, 21:31 , 26-Апр-07 (1)
>День добрый! > >Как правильно будет выглядеть запрос с бинд переменной в операторе like? > >Что-то наподобие "select * from ocip where upper(fio) like '%'||upper(rtrim(:word))||'%'", но результат >всегда - все строки таблицы. например OCIBindByName( oci_req_handle,&field_handle,error_handle, ":word",strlen(":word"), (dvoid *)(&word_var),sizeof(word_var), SQLT_STRING /* ?? не знаю точно ли такая константа */, &i /* sb2 i=1 */, &a /* ub2 a=field_size */, &rcode, 0,0,OCI_DEFAULT);а в чем собсно разница - like, =, или еще какой оператор? \^P^/
- like в запросе через OCI, dronord, 09:58 , 27-Апр-07 (2)
Бинжу =) я так:
char search[100];c1.bind_name ( ":word", search, 100 ); void cursor::bind_name(const char *name, char *value, int size) { OCIBind *tmp_bind; sb2 *tmp_indp = new sb2; rc = OCIBindByName(_stmthp, &tmp_bind, _errhp, (text*)name, strlen(name), (dvoid*)value, size, SQLT_CHR, tmp_indp, 0, 0, 0, 0, OCI_DEFAULT); if (rc) { throw oexcept("cursor::bind_name()", _errhp, rc); } _binds.push_back(tmp_bind); _ind_names.push_back(tmp_indp); }
Поведедение на разных ОС разное. В виндеselect * from ocip where upper(fio) like '%'||upper(rtrim(:word))||'%' возвращает все строки, в SunOS 5.9 ничего.В винде select :word from dual ничего не возвращает, в соляре то, что передашь. То бишь правильно работает. Если запрос без биндов, то есть select * from ocip where upper(fio) like '%'||upper(rtrim('utusov'))||'%' , то правльно работает и в винде и в солярке. Наверное, я неправильно бинжу.
- like в запросе через OCI, perece, 12:03 , 27-Апр-07 (3)
> rc = OCIBindByName(_stmthp, &tmp_bind, _errhp, (text*)name, strlen(name), (dvoid*)value, size, SQLT_CHR, tmp_indp, 0, 0, 0, 0, OCI_DEFAULT); >Поведедение на разных ОС разное. >В виндеselect * from ocip where upper(fio) like '%'||upper(rtrim(:word))||'%' >возвращает все строки, в SunOS 5.9 ничего. > >В винде select :word from dual ничего не возвращает, в соляре то, >что передашь. То бишь правильно работает. > >Если запрос без биндов, то есть select * from ocip where upper(fio) >like '%'||upper(rtrim('utusov'))||'%', то правльно работает и в винде и в солярке. > > >Наверное, я неправильно бинжу. наверное. после индикатора - два нуля. ну rcode, возможно, и не обязательно, я не помню. но вот field size всеж надо передать (параметр, следующий сразу за индикатором - адрес переменной типа ub2, проинициализированый длинной поля в базе. у тебя там 0) кроме того, я OCI щупал только на соляре. за винды не скажу ничего... \^P^/
- like в запросе через OCI, perece, 12:18 , 27-Апр-07 (4)
кстати... а инициализируешь ли ты индикатор единицей прежде, чем екзек'ютить запрос?\^P^/
- like в запросе через OCI, dronord, 14:17 , 27-Апр-07 (5)
Индикатор действительно подводил. И следующий аргумент так же =) Думал, alenp для массивов только. perece, спасибо!
|