평가 삽입 SQL안녕 모두,
ID 이름이 일치하는 행만 가져오는 SQL 문을 생성하려고 합니다.
SQL 문자열에 Eval 삽입을 원하는 사용자 목록이 있습니다. 문제는 작은따옴표 대신 큰따옴표로 구문 분석한다는 것입니다.
Names default to here (1);<BR />// got the userlist from a data table using dt:users << get as matrix<BR />userlist = {"01E1B5C0651EDA80", "F62B70921920FCBE", "909D35028E2039CE", "B339888591CF1346"};
<BR />// define an SQL string to host the list of user ids
sqlstr_ =
"SELECT \!"t1\!".uid
FROM \!"Tables\!".\!"Table\!" \!"t1\!"
WHERE ( \!"t1\!".uid IN ( ^userlist^) )
;";
Eval Insert( sqlstr_logs );
// i get the following non working SQL string
"SELECT \!"t1\!".uid
FROM \!"Tables\!".\!"Table\!" \!"t1\!"
WHERE ( \!"t1\!".uid IN ( {\!"01E1B5C0651EDA80\!", \!"F62B70921920FCBE\!", \!"909D35028E2039CE\!", }) )
;"
// i would like to get the following working SQL statement
"SELECT \!"t1\!".uid
FROM \!"Tables\!".\!"Table\!" \!"t1\!"
WHERE ( \!"t1\!".uid IN ( '01E1B5C0651EDA80' , 'F62B70921920FCBE' , 'F62B70921920FCBE' ) ) ;"
미리 감사드립니다.
스크립팅Re: Eval 삽입 SQLuserlist= {"01E1B5C0651EDA80", "F62B70921920FCBE", "909D35028E2039CE"};
sqlstr_ =
"SELECT \!"t1\!".uid
FROM \!"Tables\!".\!"Table\!" \!"t1\!"
WHERE ( \!"t1\!".uid IN ( '^
concatitems(userlist,\!"','\!")
^') )
;";
write(Eval Insert( sqlstr_ ));
선행 및 후행 아포스트로피는 내부 아포스트로피와 다르게 처리됩니다. ^, 대 분리자 문자열 바로 전후를 참조하십시오. 사용자 목록에 0개의 항목이 있을 수 있는 가능성이 있는 경우 쿼리를 실행하기 전에 확인해야 합니다. 아마도 의미가 없기 때문입니다.
다른 이스케이프 메커니즘을 사용하여 좀 더 읽기 쉽게 만들 수 있습니다(html은 이에 대해 알지 못하므로 웹에서 구문 색상이 잘못됨).
userlist= {"01E1B5C0651EDA80", "F62B70921920FCBE", "909D35028E2039CE"};
sqlstr_ =
"\[
SELECT "t1".uid
FROM "Tables"."Table" "t1"
WHERE ( "t1".uid IN ( '^
concatitems(userlist,"','")
^') );
]\";
write(Eval Insert( sqlstr_ ));
write()를 사용하여 결과를 표시하는 것도 도움이 됩니다.
SELECT "t1".uid
FROM "Tables"."Table" "t1"
WHERE ( "t1".uid IN ( '01E1B5C0651EDA80','F62B70921920FCBE','909D35028E2039CE') );
Re: Eval 삽입 SQL감사합니다 @Craige_Hales , 이것은 매우 유용합니다.
이제 eval 삽입이 올바르게 작동합니다. 다른 탈출 메커니즘과 관련하여 훨씬 쉽습니다. 유감스럽게도 이것은 소프트웨어가 작성하는 방식이 아닙니다.
SQL에 또 다른 문제가 있습니다. 값이 16개의 영숫자 문자로 구성된 행만 가져오고 싶습니다.
길이 문 자체는 잘 작동합니다. 정규식은 그렇지 않습니다
sqlstr_uid =
"\[
SELECT DISTINCT "t1".uid
FROM "Tables"."Table" "t1"
WHERE ( (LENGTH ( "t1".uid) = 16) AND ( "t1".uid REGEXP '^[A-Za-z0-9]+$' ) )
]\";
= 또는 대괄호가 누락되었나요?
다시 한번 감사합니다!
Re: Eval 삽입 SQL웹에서 임의의 사이트를 보면 제대로 보입니다. 저는 SQL 전문가가 아닙니다.
Re: Eval 삽입 SQL@ron_horne , REGEXP_LIKE 시도
Re: Eval 삽입 SQL고맙습니다 @ErraticAttack ,
작동하지 않았습니다. 나는 이 표현을 사용할 수 있었습니다.
regexp_substr("t1".uid, '^[A-Za-z0-9]+$')="t1".uid )
Re: Eval 삽입 SQL@Craige_Hales
다음 정규식은 sql 문을 문자열로 제출할 때 작동합니다.
regexp_substr("t1".uid, '^[A-Za-z0-9]+$')="t1".uid )
그러나 평가 삽입(sql_str)을 사용하여 이 표현식을 제출할 때 오류가 발생합니다.
오류는 [와 관련이 있으므로 evel 삽입이 ^ 바로 앞에 어려움을 겪고 있다고 가정합니다.
^ 를 탈출하는 방법이 있습니까?
다음은 정확한 오류를 보여줍니다.
sqlstr_uid =
"\[
SELECT DISTINCT "t1".uid
FROM "Tables"."Table" "t1"
WHERE "t1".uid REGEXP '^[A-Za-z0-9]+$'
]\";
write(Eval Insert( sqlstr_uid ));
많은 감사합니다!
론
Re: Eval 삽입 SQLEval Insert와 함께 사용할 문자를 정의할 수 있으며 SQL 문자열(특히 정규식을 사용하는 문자열)을 평가하는 경우 기본값 ^ 이외의 다른 문자를 사용하는 것이 좋습니다. 일반적으로 "¤"를 사용합니다.
Names Default To Here(1);
sqlstr_uid =
"\[
SELECT DISTINCT "t1".uid
FROM "Tables"."Table" "t1"
WHERE "t1".uid REGEXP '^[A-Za-z0-9]+$'
]\";
Write(Eval Insert(sqlstr_uid, "¤"));
Re: Eval 삽입 SQL매우 감사합니다 @jthi 이것은 완벽 해요!
Re: Eval 삽입 SQL유사한 예
sqlstr_uid =
"\[
SELECT DISTINCT "t1".uid
FROM "Tables"."Table" "t1"
WHERE "t1".uid REGEXP '^[A-Za-z0-9]+$'
]\";
write(Eval Insert( "the test ☺sqlstr_uid☺ works", "☺" ));
시험
고유한 "t1".uid 선택
FROM "테이블"."테이블" "t1"
WHERE "t1".uid REGEXP '^[A-Za-z0-9]+$'
공장
\!가 없는 것 같습니다. Eval Insert의 이스케이프 메커니즘; 사용하지 않는 캐릭터를 선택해야 합니다.