: SQL : 문/SQL을 사용하는 경우질문은 SQL : 문 : 기능 문서에서
이기능 구문은
:: 파서 직접 SQL 구문을 분석하는 값, 열 이름, 테이블 이름 또는 술어가 발생할 수있는 SQL 문에서 함수 (내장 또는 사용자 정의)가 발생할 수 있습니다. DBD를 통해 또는 SQL이 파싱되고 실행되는 다른 컨텍스트에서 모듈을 사용할 때 FROM 절이 포함 된 SELECT 문의 열 선택 절에서 발생할 수 없다는 점을 제외하면 동일한 위치에서 함수가 발생할 수 있습니다.
모두 구문 분석에 대한 유효 # 만 해석 유효
SELECT MyFunc(args);
SELECT * FROM MyFunc(args);
SELECT * FROM x WHERE MyFuncs(args);
SELECT * FROM x WHERE y < MyFuncs(args);
#을 실행 (A DBD에서 작동하지 않습니다)는
SELECT MyFunc(args) FROM x WHERE y;
내가 예상이 읽기 내 예제의 첫 번째 SELECT 문은 작동하지 않아야하며 두 번째 SELECT 문은 그렇지 않아야합니다.
#!/usr/bin/env perl
use warnings; use strict;
use 5.010;
use DBI;
open my $fh, '>', 'test.csv' or die $!;
say $fh "id,name";
say $fh "1,Brown";
say $fh "2,Smith";
say $fh "7,Smith";
say $fh "8,Green";
close $fh;
my $dbh = DBI->connect ('dbi:CSV:', undef, undef, {
RaiseError => 1,
f_ext => '.csv',
});
my $table = 'test';
say "\nSELECT 1";
my $sth = $dbh->prepare ("SELECT MAX(id) FROM $table WHERE name LIKE 'Smith'");
$sth->execute();
$sth->dump_results();
say "\nSELECT 2";
$sth = $dbh->prepare ("SELECT * FROM $table WHERE id = MAX(id)");
$sth->execute();
$sth->dump_results();
출력 :
1
'7'
1 행가 /usr/lib/perl5/site_perl/5.10에서 2
를 선택 .0/SQL/Parser.pm 라인 2893.
알 기능 'MAX'를 선택
DBD :: CSV :: db 준비 실패 : /usr/lib/perl5/site_perl/5.10.0/SQL/Parser.pm 라인 2894에서 알 수없는 함수 'MAX'가 실패했습니다. ./so_3.pl 라인 30. "SELECT * FROM test WHERE id = MAX (id)"] 문에 대해
DBD :: CSV :: db 준비 실패 : 알 수없는 함수 '/ usr/lib'의 'MAX' /perl5/site_perl/5.10.0/SQL/Parser.pm 라인 2894.
[성명은 "시험 * FROM WHERE ID = MAX (ID)"] ./so_3.pl 라인에서 30
누군가 나에게이 행동을 설명 할 수 있습니까?
나는이 오류 -를 얻을 ...
는 UDF 또는 함수를 사용하는 쿼리가 오류가 도망 갔어요 바로 전에 : 내가 그랬다면 것을 발견 메시지 : 잘못된 테이블 또는 열 이름 : '(MAX (ID) FROM 테스트 선택)'의 문자는 영숫자 또는 밑줄이 아닙니다! /usr/lib/perl5/site_perl/5.10.0/SQL/Parser.pm 라인 2893. DBD :: CSV :: db 준비 실패 : 잘못된 테이블 또는 열 이름 : '(MAX (ID) FROM 테스트 선택)' 영숫자 또는 밑줄이 아닌 문자가 있습니다! /usr/lib/perl5/site_perl/5.10.0/SQL/Parser.pm 라인 2894에 있습니다. [for * statement for "SELECT * FROM test ="(MAX (id) FROM 테스트 선택 ")]. –@sid_com - 그런 다음 먼저 실행 - MAX (id) FROM $ table - put을 선택하십시오. 두 번째 쿼리를 실행하십시오. SELECT * FROM $ table WHERE id = $ max_id – msi77
"Select MAX (id) FROM $ table WHERE id = $ max_id"는 OK입니다. ? "DBD에서 작동하지 않습니다. - SELECT MyFunc (args) FROM x WHERE y;" 사용자 정의 함수 만? –