当前位置: 首页 > 编程语言 > C#

UPSERT进入具有动态表名的表分享

时间:2023-04-10 22:57:24 C#

C#学习教程:UPSERTINTOTABLESWITHDYNAMICTABLENAMESPROCEDUREPROCEDURE“SPINSERTDATA”(RAW中的pObjectID,TIMESTAMP中的pDateTime,BINARY_DOUBLE中的pValue,)作为开始声明vQueryInsertVARCHAR2(1000);vQueryUpdateVARCHAR2(1000);vTableNameVARCHAR2(30);开始vTableName:=FGETTABLENAME(POBJECTID=>pObjectID);vQueryUpdate:='更新'||vTableName||'设置“值”=:1';vQueryInsert:='插入'||vTableName||'("DTTIME","VALUE")值(:1,:2)';使用pDateTime、pValue立即执行vQueryInsert;当DUP_VAL_ON_INDEX然后使用pValue执行立即vQueryUpdate时出现异常;结尾;结束“SPINSERTDATA”;数字不为空主键,值varchar2(20));插入so_test(pk,value)values(1,'one');声明l_SQLvarchar2(4000);l_tablenamevarchar2(4000)默认'so_test';开始l_SQL:='合并到'||l_表名||'目标'||'使用(select1pk,''eins''valuefromdualunionallselect2pk,''zwei''valuefromdual)sourceon(target.pk=source.pk)当匹配时更新设置target.value=source.value不匹配时插入values(source.pk,source.value)';dbms_output.put_line(l_sql);立即执行l_SQL;结尾;您可以发布使用MERGE时收到的错误消息吗?您应该考虑编写此代码以使用静态SQL而不是在运行时传递表名是否有正当理由为什么您不知道在运行时要合并到哪个表?至于调试问题...如何在代码中定义FGETTABLENAME函数?这就是我想出的模仿这种情况的方法。我建议使用%type(而不是数字类型的RAW)声明并从过程名称中删除双引号。创建或替换函数FGETTABLENAME(POBJECTIDinuser_objects.object_id%type)returnuser_objects.object_name%typeasv_object_nameuser_objects.object_name%type;beginselectobject_nameintov_object_namefromall_objectswhereobject_id=pobjectid;返回v_object_name;结尾;/SQL>从user_objects中选择object_id、object_name;OBJECT_IDOBJECT_NAME-------------------------------------------------------52641TFIVE52644SPINSERTDATA52643过程52645FGETTABLENAME52554GET_SAL_EMP52559T1SQL>从双重中选择FGETTABLENAME(52641);FGETTABLENAME(52641)--------------------------------------------T五个你可以添加DBMS_OUTPUT.PUT_LINE语句vTableName:=FGETTABLENAME(POBJECTID=>pObjectID);和vQueryUpdate:='更新'||vTableName||'设置“值”=:1';vQueryInsert:='插入'||vTableName||'("DTTIME","VALUE")值(:1,:2)';或者跟踪代??码以查看实际触发到数据库的SQL语句。首先,您的UPDATE中没有WHERE,因此它会更新表的每一行。其次,您是否使用大小写混合的表名。如果你做CREATETABLE"testOne"(IDNUMBER);那么表名将存储为testOne。但是当您执行UPDATEtestOne时,它??将被视为UPDATETESTONE并且您将收到“没有这样的表”错误。避免使用大小写混合的表名。如果一定要,那你需要在动态SQL语句中引用它们以上是C#学习教程:UPSERT输入表的全部内容,动态表名共享,如果对大家有用需要多了解一下C#学习教程,希望大家多多关注~本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:

最新推荐
猜你喜欢