为上火鸟数据创建触发器

问题描述 投票:0回答:1

我查询了Firebird中的UPDATE或INSERT数据,但是此值来自用户类型,因此我想创建一个模式,所有数据均作为Upper。

在Firebird 2.5中有可能吗?

我的#1测试

"UPDATE OR INSERT INTO ENTIDADE_001 (CODCLI,NAME) VALUES UPPER('$erp_codcli','$erp_codcli')"

我的#2测试

"UPDATE OR INSERT INTO ENTIDADE_001 (CODCLI,NAME) VALUES UPPER(('$erp_codcli','$erp_codcli'))"
sql firebird firebird2.5
1个回答
0
投票

您的更新或插入语句的问题是它们在语法上不正确。 VALUES子句采用值列表,而UPPER(...)不是值列表,请参见UPDATE OR INSERT的语法:

UPDATE OR INSERT

其次,UPDATE OR INSERT INTO {target} [(<column_list>)] VALUES (<value_list>) [MATCHING (<column_list>)] [RETURNING <values> [INTO <variables>]] <column_list> ::= colname [, colname ...] <value_list> ::= value [, value ...] <ret_values> ::= ret_value [, ret_value ...] <variables> ::= :varname [, :varname ...] 是一个带有单个参数的函数。

您的语句的语法正确版本是:

UPPER

但是,正如Arioch'The也在评论中所说,这样的字符串插值是不安全的,并使您的代码容易受到SQL注入的攻击。您应该使用参数化的prepared语句,然后将值设置为参数。

关于您的问题标题中所询问的问题,如何创建触发器,请参阅UPPER上的Firebird文档。一个简单的触发器示例可以满足您的要求:

UPDATE OR INSERT INTO ENTIDADE_001 (CODCLI,NAME) 
  VALUES (UPPER('$erp_codcli'), UPPER('$erp_codcli'))

请参见triggers以获取工作示例。

© www.soinside.com 2019 - 2024. All rights reserved.