Tôi có một biến clob, cần phải gán nó vào biến varchar2. Các dữ liệu bên trong clob var nhỏ hơn 4000 (maxsize i..e varchar2 của) oracle10 +Làm thế nào để chuyển đổi CLOB sang VARCHAR2 bên trong oracle pl/sql
tôi đã cố gắng
report_len := length(report_clob);
report := TO_CHAR(dbms_lob.substr(report_clob, report_len, 1));
report_clob := null;
nhưng nó biến báo cáo vào giá trị lâu mà tôi nhìn thấy trong khi gỡ lỗi. Ngoài ra khi tôi gọi sql này (proc) từ mã C# của tôi. Nó phàn nàn nói đệm quá nhỏ, bởi vì tôi gửi tham số theo varchar, nhưng chuyển đổi ở trên có thể biến nó thành giá trị dài.
Tôi thậm chí đã cố gắng phân công trực tiếp
report_clob := report
nhận được kết quả tương tự.
EDIT
Ok, để trả lời những câu hỏi dưới đây xin vui lòng xem: tôi gỡ lỗi sử dụng kịch bản thử nghiệm trong phát triển PL/SQL. biến báo cáo là varchar2 (4000). Khi tôi bước sau dòng thứ hai. báo cáo cho thấy là một giá trị dài và nó chỉ nói (Giá trị dài). thậm chí không thể xem nội dung.
báo cáo và report_clob biến mất khỏi quy trình. Thủ tục này được gọi từ mã C#.
Có một bộ đệm chuỗi ngoại lệ quá nhỏ trong C# khi tôi gọi thủ tục này. Tôi đã đưa ra 5000 như kích thước của biến báo cáo trong C# đủ để nhận được 4000 ký tự tối đa giá trị từ thủ tục. Vì vậy, tôi đoán vấn đề không nằm ở đó.
Và khi tôi chỉ định báo cáo: = 'một số chuỗi ....' thì cuộc gọi C# hoạt động tốt. Vì vậy, điều tra của tôi nói rằng báo cáo: = transform (report_clob) là làm cho báo cáo trở thành giá trị dài hoặc một số điều như vậy (lạ) mà làm cho mã C# có vấn đề để xử lý giá trị lớn hơn trong tham số 5000 varchar out.
Mọi chi tiết khác tôi sẽ sẵn lòng cung cấp.
'Báo cáo' được khai báo như thế nào? 'LONG' hoặc' VARCHAR2'? Làm thế nào bạn gỡ lỗi, và làm thế nào bạn trả về giá trị cho 'C#' - hàm trả về hoặc tham số đầu ra, và kiểu đó là gì? –
'báo cáo: = CAST (report_clob AS VARCHAR2 (3999));' – Annjawn
'DBMS_LOB.substr' trả về VARCHAR2, bạn không cần hàm' TO_CHAR'. Ngoài ra, bạn gọi một giá trị lâu dài là gì? Làm thế nào để bạn gỡ lỗi? Bạn nhận được thông báo lỗi nào (tức là Oracle hoặc C#)? Biến báo cáo được khai báo như thế nào? –