为 UPPER() Firebird 数据创建触发器
Create trigger to UPPER() Firebird data
我有一个在我的 Firebird 中更新或插入数据的查询,但是这个值来自什么用户类型,所以我想创建一个模式,所有数据都是 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 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
是一个接受单个参数的函数。
你的语句在语法上正确的版本是:
UPDATE OR INSERT INTO ENTIDADE_001 (CODCLI,NAME)
VALUES (UPPER('$erp_codcli'), UPPER('$erp_codcli'))
但是,正如 Arioch 'The 在评论中所说,这样的字符串插值是不安全的,并且会使您的代码容易受到 SQL 注入的攻击。您应该使用参数化准备语句,并将值设置为参数。
关于您的问题标题中提出的如何创建触发器的问题,请参阅 triggers 上的 Firebird 文档。执行您想要的操作的触发器的一个简单示例是:
create trigger ENTIDADE_001_UPPERCASE
active before insert or update on ENTIDADE_001
as
begin
new.CODCLI = upper(new.CODCLI);
new.NAME = upper(new.NAME);
end
请参阅此 dbfiddle 以获取工作示例。
我有一个在我的 Firebird 中更新或插入数据的查询,但是这个值来自什么用户类型,所以我想创建一个模式,所有数据都是 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 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
是一个接受单个参数的函数。
你的语句在语法上正确的版本是:
UPDATE OR INSERT INTO ENTIDADE_001 (CODCLI,NAME)
VALUES (UPPER('$erp_codcli'), UPPER('$erp_codcli'))
但是,正如 Arioch 'The 在评论中所说,这样的字符串插值是不安全的,并且会使您的代码容易受到 SQL 注入的攻击。您应该使用参数化准备语句,并将值设置为参数。
关于您的问题标题中提出的如何创建触发器的问题,请参阅 triggers 上的 Firebird 文档。执行您想要的操作的触发器的一个简单示例是:
create trigger ENTIDADE_001_UPPERCASE
active before insert or update on ENTIDADE_001
as
begin
new.CODCLI = upper(new.CODCLI);
new.NAME = upper(new.NAME);
end
请参阅此 dbfiddle 以获取工作示例。