如何在SQL :: Parser中获取包含所有保留字的列表?

sid*_*com 0 sql perl

#!/usr/bin/perl
use warnings;
use strict;
use 5.010;
use SQL::Parser;                                 

my $parser = SQL::Parser->new( 'ANSI', {RaiseError=>1} );

my $word = 'BETWEEN';

my $success = $parser->feature( 'reserved_words', $word );
$success = $success ? '' : 'NOT';
say "$word is $success a reserved word";
Run Code Online (Sandbox Code Playgroud)

我可以检查一个单词是否是保留字.

是否有一个函数可以为我提供所有保留字的列表?

Sch*_*ern 7

SQL :: Dialects :: ANSI是一个简单的接口,用于获取有关INI格式的ANSI SQL的信息.所以你得到它并解析它...除了它不是INI格式,因为它不包含key = value但只包含key哪些扼流圈Config :: INI.唉,这是我能找到的少数可以处理字符串的INI解析器之一.

所以你可能需要手工解析它.这就是SQL :: Parser所做的.

或者,您可以从SQL :: Parser的内容中提取列表.

use Data::Dumper;
use SQL::Parser;

my $s = SQL::Parser->new;
print Dumper $s->{opts}{reserved_words};
Run Code Online (Sandbox Code Playgroud)

这是一个黑客,最终会失败.

根据我上面的评论,ANSI SQL保留字列表(嘿,哪个版本的ANSI SQL?)不是确定的.数据库本身可以保留其他单词.不同的版本可能会保留不同的单词.如果你能找到一种方法去做你正在做的事情而不依赖于保留字的列表,那就去做吧.