Я новичок в Oracle SQL и PL sql.i имеют записи пл функцию SQL, которая принимает данные из PHP в XML format.Here это код 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;
При вставке данных, Я заметил, что таблица оракула также принимает данные, которые больше, чем их первоначальный размер! Например, следующие колонки приема данных, которые больше, чем размер 10.
EMPID NVARCHAR2(10)
если данные 12 в длину, то он занимает 1-ые 10 chars.But мне, я думаю, это должно быть инвалидом/error.Because, в противном случае определение размера столбца бессмысленно. Я знаю о добавлении ограничений. Но добавление многих ограничений для таких мелочей очень скучно и утомительно. Если я сделал какие-либо ошибки/ошибки, то, пожалуйста, помогите мне понять это. Спасибо
Благодаря @Alex Poole ваше объяснение очищает мне понятие о it.Your трюк очень хорошо, и это worked.However я замечаю, что XML правильно следующее ограничение на размер типа NUMBER (4,0). Проблема заключается в типе NVARCHAR2.Что вы скажете, почему таблица xml корректно соответствует лимиту размера типа NUMBER (4,0). Спасибо. – user5005768
@ user5005768 - ошибка с ORA-01438, если вы превысите указанную точность номера, например. если элементы XML содержат 10000, даже если у вас есть выбор без вставки. Это не будет ошибкой, если у вас есть значение как 9999.999 по мере совпадения точности, и значимые цифры за пределами указанного масштаба будут округлены. [Подробнее о масштабе и точности] (http://docs.oracle.com/cd/E11882_01/server.112/e41084/sql_elements001.htm#sthref118). –
Большое спасибо @Alex Poole.Можно также посетить мой другой пост в oracle xml http://stackoverflow.com/questions/34855163/how-to-deal-with-sequence-in-oracle-xmltable – user5005768