我正在写一个PLSQL 'INSTEAD OF INSERT'触发器,其中ID字段(GID)可以作为字符串或数字插入。如果GID值是一个字符串,我想尝试将其转换为正确的GID(数字),否则如果输入一个数字,脚本将继续。
我在这里努力解决的部分是确定':New.CHART_GID'的数据类型 - 这在PLSQL中是否可行?我无法检查字符串中的字符,因为字符串在某些情况下可能只包含数字。
感谢。
答案 0 :(得分:0)
您可以使用TRANSLATE检查是否还有其他数字:
CREATE OR REPLACE TRIGGER trigger_name
INSTEAD OF INSERT
ON table_name
FOR EACH ROW
DECLARE
vGID INTEGER;
...... other things
BEGIN
IF :New.CHART_GID is not null AND TRANSLATE(:New.CHART_GID,'0123456789',' ') is null THEN
vGID := TO_NUMBER(:New.CHART_GID);
.... do what you want with number
ELSE
... do what you want with not number
END IF;
.... other things
END;
CHART_GID必须是视图中的varchar2
答案 1 :(得分:0)
我意识到我想要实现的目标实际上是不可能的。对我来说,解决方案实际上是将Chart_no加入视图并插入到GID的任一字段中。如果我输入Chart_no,则会自动填充GID字段,如果输入GID则相同。