Leo Wangxia 2020-10-26 12:00 采纳率: 0%
浏览 161

sqlserver2008触发器调用oracle的存储过程,怎么将sqlserver的image传到oracle中

sqlserver触发调用oracle存储过程提示字段类型不对;检查发现是图片类传输错误,如下是sqlserver触发器及oracle存储过程;请问一下这个问题怎么处理;谢谢

sqlserver触发器
USE [ps_tr_pic]
GO
/****** Object: Trigger [dbo].[O_IMA_blob_hash] Script Date: 10/26/2020 08:17:04 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER trigger [dbo].[O_IMA_blob_hash]

on [dbo].[blob_hash] instead of insert --插入触发

as --定义变量

declare

@hash_value nvarchar(50), --hash_value
@hash_blob varbinary(max), --图片类容
@pic_name nvarchar(50), --图片名称
@hz nvarchar(50) --后缀名
--@sl_30 NUMERIC(20,5), --物料尺寸长

declare @V_NAME nvarchar(20);--返回参数

BEGIN

select @hash_value = hash_value, @hash_blob = hash_blob ,@ins_date = GETDATE()
from Inserted ; --亿星表

set xact_abort ON

EXEC('begin TEST_INSERT_TC_GCB(?,?,?);END;',@hash_value,@hash_blob,@V_NAME output) at TT;

PRINT '已经成功处理记录!'

END
print '发送信息成功!';

oracle存储过程
CREATE OR REPLACE PROCEDURE TEST_INSERT_TC_GCB(
tc_gcb01 in VARCHAR2, --yx料号
--tc_gcb04 in VARCHAR2, --文件名称
--tc_gcb05 in VARCHAR2, --文件类型
tc_gcb07 IN BLOB, --文件类容
--tc_gcb08 IN VARCHAR2,
v_name OUT VARCHAR2
)
IS

BEGIN

INSERT INTO tc_gcb_file(tc_gcb01,tc_gcb07 ) VALUES
                       (tc_gcb01,tc_gcb07 );

  if SQL%Found THEN
     v_name := '1';
  else
     v_name := '0';
      dbms_output.put_line('v_name'|| v_name );
 end if;

END;

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-07-24 23:23
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    要将SQL Server中的图像数据(例如BLOB)传递到Oracle中执行存储过程,您需要确保在触发器中正确地使用了@hash_blob变量来接收图像数据。此外,还要确保您的存储过程能够正确地从Oracle接收并处理这些图像。

    首先,请确保已正确配置SQL Server的ADO.NET集成数据库连接,并且在触发器中正确引用了存储过程。

    其次,在存储过程中,确保正确地设置IN BLOB类型的输入参数以接受图像数据。这可能涉及对图像进行适当的编码或转换,以便它们可以被解析为字节流或二进制对象。

    最后,确保存储过程能够正确地读取和处理来自触发器的输出结果,以及正确地从Oracle中获取图像数据。

    以下是一个示例代码:

    SQL Server 触发器:

    USE [ps_tr_pic]
    
    GO
    
    ALTER trigger [dbo].[O_IMA_blob_hash]
    on [dbo].[blob_hash]
    instead of insert
    as
    BEGIN
        DECLARE @hash_value nvarchar(50),
               @hash_blob varbinary(max),
               @pic_name nvarchar(50);
    
        SELECT @hash_value = hash_value,
               @hash_blob = hash_blob,
               @pic_name = pic_name
            FROM inserted;
    
        IF (@hash_blob IS NOT NULL)
        BEGIN
            INSERT INTO oracle_image_table (hash_value, image_data)
                VALUES (@hash_value, @hash_blob);
        END
    END
    GO
    

    Oracle 存储过程:

    CREATE OR REPLACE PROCEDURE TEST_INSERT_TC_GCB(
        tc_gcb01 in VARCHAR2,
        tc_gcb07 in BLOB
    )
    
    IS
    BEGIN
        INSERT INTO tc_gcb_file(tc_gcb01, tc_gcb07) VALUES (tc_gcb01, tc_gcb07);
        
        IF SQL%FOUND THEN
            V_NAME := '1';
        ELSE
            V_NAME := '0';
            DBMS_OUTPUT.PUT_LINE(V_NAME);
        END IF;
    END;
    

    以上代码说明了如何使用SQL Server的ADO.NET集成数据库连接和触发器,以及如何通过Oracle存储过程处理图像数据。请注意,这只是一个基本示例,实际应用中可能需要根据具体需求进行调整。

    评论

报告相同问题?

悬赏问题

  • ¥15 R语言绘制生存曲线时出现警告:All aesthetics have length 1, but the data has 2 rows.
  • ¥15 pyqt怎么把滑块和输入框相互绑定,求解决!
  • ¥20 wpf datagrid单元闪烁效果失灵
  • ¥15 券商软件上市公司信息获取问题
  • ¥100 ensp启动设备蓝屏,代码clock_watchdog_timeout
  • ¥15 Android studio AVD启动不了
  • ¥15 陆空双模式无人机怎么做
  • ¥15 想咨询点问题,与算法转换,负荷预测,数字孪生有关
  • ¥15 C#中的编译平台的区别影响
  • ¥15 软件供应链安全是跟可靠性有关还是跟安全性有关?