【发布时间】:2016-01-17 23:42:52
【问题描述】:
我是 oracle sql 和 pl sql 的新手。我编写了 pl sql 函数,它以 xml 格式从 php 获取数据。这是下面的 pl sql 代码,它工作正常:
FUNCTION save_overtime(overtime_data NVARCHAR2 ) RETURN clob IS ret clob;
xmlData XMLType;
v_code NUMBER;
v_errm VARCHAR2(100);
BEGIN
xmlData:=XMLType(overtime_data);
INSERT INTO TBL_OVERTIME SELECT x.* FROM XMLTABLE('/overtime'
PASSING xmlData
COLUMNS OT_EMPID NVARCHAR2(10) PATH 'employee_id',
OT_DATE DATE PATH 'date',
OT_HOUR NUMBER(4,0) PATH 'overtime_hour'
) x;
ret:=to_char(sql%rowcount);
COMMIT;
RETURN '<result><status affectedRow='||ret||'>success</status></result>';
EXCEPTION
WHEN OTHERS THEN
v_code := SQLCODE;
v_errm := SUBSTR(SQLERRM, 1, 100);
DBMS_OUTPUT.PUT_LINE (v_code || ' ' || v_errm);
-- '<result><status>Error</status> <error_message>'|| 'Error Code:' || v_code || ' ' || 'Error Message:' || v_errm ||'</error_message> </result>';
RETURN '<result><status>Error</status> <error_message>'|| 'Error Message:' || v_errm ||'</error_message> </result>';
END save_overtime;
在插入数据时,我注意到 oracle 表也在接受大于其初始大小的数据! 例如,以下列接受大于 10 的数据。
EMPID NVARCHAR2(10)
如果数据长度为 12,那么它需要第一个 10 个字符。但对我来说,我认为 它应该是无效/错误。因为,否则定义列大小是没有意义的。我知道添加约束。但是为这样的小事情添加许多约束非常无聊和乏味。如果我做错了/错误,那么请帮助我明白了。谢谢
【问题讨论】: