我查询了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'))"
您的更新或插入语句的问题是它们在语法上不正确。 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以获取工作示例。