SIEBEL功能组件,eScript入门

2023-11-08


前言

9.4~9.16学习情况总结


学习任务

  • MVG的配置与学习
  • View Mode和Visible的配置
  • SQL基础略看
  • EBC和VBC的学习
  • Import Object学习
  • eScript入门、编码训练

一、MVG的配置与学习

个人理解MVG就是1:M或者M:M的关系模型,MVG的配置就将这种关系可视化、数据化。

1. 1:M的MVG配置,以统计订单行数量功能为例

  1. 创建Link:Cascade Delete级联删除填写Delete,避免出现垃圾数据,父子BC填写对应字段即可
    在这里插入图片描述

  2. 在父BC中创建MVL如下,DestinationBC选择子BC名,Link选刚才的Link即可。
    Auto Primary&Primary ID Field: 对于没有Primary概念的子BC(即订单行
    中,没有一个订单行是主要的) , 我们把该属性置为None, Primary ID
    Field留空。
    No Associate/Copy/Delete/Insert/Update: 配置订单行BC是为了统计订
    单行的数据,而不能直接通过MVG对订单行进行编辑,因此我们把这些勾全
    勾上。

在这里插入图片描述

  1. 创建MVF:如我们需要统计订单行订购的总量, 那么我们可以把订单行上的Quantity字段作为订单头的MVF。一个订单头上有多少条订单行,这个MVF就有多少个值。MVF也是FIeld的一种。

在这里插入图片描述
4. 创建一个Calculate字段:注意Type属性更改(默认是Text属性),使用Count函数对MVF进行统计,例子中有多少序列号就有多少MVF记录数,统计记录数就是统计订单行数量。注意, Count函数的参数一定是一个MVL的名字。
在这里插入图片描述

1. M:M的MVG配置

  1. 创建中间表,新建两个外键,分别指向父子BC
    在这里插入图片描述

  2. 创建Link,与1:M区别较大,有中间表做级联了,所以Source Field和Destination Field不填
    重要属性包括:
    Inter Table:中间表。
    Inter Parent Column: 中间表中父BC的表的外键。
    Inter Child Column:中间表中子BC的表的外键。
    Primary ID Field: 父BC中用于标识主要的字段。
    Cascade Delete: 再次强调, 除非需求很特殊,否则M:M的Link一定要选
    None!

    Primary Id Field = Child Id:业务上区分主要非主要、提升系统性能。
    在这里插入图片描述

  3. 创建MVF
    在这里插入图片描述

  4. 创建MVG Applet

  • 运行向导,BC字段填写子BC
  • Pick Applet类型。选择Edit List模式,模板选择Popup List Mvg
  • 选择需要的字段(MVF中创建的字段),其中SSA是主要字段,隐藏Field

在这里插入图片描述

  • 调整布局
  • 配置确定按钮:
    在Control下新建一条记录,设置以下属性:
    Name: CloseApplet
    Caption – String Reference: SBL_OK-1004224735-0D4
    HTML Type: MiniButton
    Method Invoke: CloseApplet
    并拖拽至界面。
  • 设置Applet属性:为了让MVG Applet能够进行关联数据和删除关联,以及更改Primary记录等操作,保持No Insert\Delete\Update属性为N,勾上No Merge属性
  • 新建BC FIeld ,将MVF的Column添加进去(此处是Name)
  • 将FIeld添加Column至Applet,并选择List Column中的MVG Applet属性
    在这里插入图片描述
  1. 创建Associate Applet
  • 复制MVG Applet,把No Delete\Insert\Update\Merge属性勾上,把Type属性改为Association List。
    在这里插入图片描述

  • 修改模板,Applet Web Template下,把Associate Applet的Web Template属性改为 Popup List Assoc。
    在这里插入图片描述

  • 删除SSA Primary Field和确定按钮,Associate Applet上无Primary的概念,因此我们把该字段删除。并把确定按钮删除。

  • 在MVG Applet上配置Associate Applet
    在这里插入图片描述

二、View Mode & Visibility配置

1. Personal安全性

  1. 在需要做安全性的BC对象中,在BuscompView Mode下创建记录如下:

在这里插入图片描述

  1. 修改View的Applet Visibility Type=Personal

在这里插入图片描述

  1. View Web Template Items上的NGC Order Header List Applet的Applet Visibility Type设为Personal。
    在这里插入图片描述

2. Position安全性

Position安全性是应用最广泛的一种安全性,因为它有两个最重要的特性是
Person安全性所不具备的:
继承性: 职位的数据可以被继承,如果一个用户离职或者换岗,那么新
顶替他的岗位用户可以继承该岗位下所有的历史数据,实现人走岗留,
使业务数据独立于人(用户)而存在。
层级性: 上级职位可以通过配置实现对他所有下级职位的数据的访问。
由于这两个特性与大多实际业务非常吻合,因此Position安全性是一种使用
很广泛,也很重要的安全性类型。

我们有标准的职位BC:Position,首先基于Position以及他的Table:S_PARTY,做一个订单头上关于职位的MVG

  1. 基于父表CX_ORDER_DWJ和子表S_PARTY建立中间表CX_POSITION_CON,创建外键字段
    在这里插入图片描述

  2. 创建Link,填写父子BC以及中间表(不必填Source和Destination Field)
    在这里插入图片描述

  3. 将Position加进BO,添加Link关系
    在这里插入图片描述

  4. 创建MVLink,Destination BC写子BC
    在这里插入图片描述

  5. 创建MVF,选择自己需要的字段
    在这里插入图片描述

  6. 创建或者直接使用MVG Applet
    在这里插入图片描述

  7. 添加MVF到订单头Applet的Column,并绑定MVG Applet
    在这里插入图片描述

  8. 在父BC中配置View Mode,选择相应的MVLink
    在这里插入图片描述

  9. 配置View的Visibility Applet Type属性,分别设置成Sales Rep和Manager
    在这里插入图片描述

  10. 配置View Web Template Items分别设置Applet Visibility Type为对应的属性
    在这里插入图片描述

  11. 在Screen中上挂上刚刚创建的View在这里插入图片描述

  12. 创建职位:开发环境中,管理—组—职位
    在这里插入图片描述

  13. 创建职责:开发环境中,管理—应用程序—职责
    在这里插入图片描述

  14. 分配职责、职位:开发环境中,管理—用户—员工
    在这里插入图片描述

  15. 在管理—应用程序中注册视图,将Manager和Sales视图分配给相应的经理账号,Sales分配给相应的销售人员账号

在这里插入图片描述

用户、职责、职位的关系如下:在这里插入图片描述
View与职责的关系是在环境中手动配置关联的,将下属的View手动添加到父职位中

三、EBC和VBC的创建

EBC指的是通过sql视图,来获取单表或者多表数据的BC,不基于任何实体表,不能直接进行新建、删除、修改操作。

1. EBC的创建

  1. 根据需求创建View,并给View赋权

创建View,保存为.sql文件备用

CREATE VIEW detail AS 
SELECT d.product_id,d.product_price,d.order_deadline,h.order_type,h.order_comments,d.order_comment
FROM  CX_ORDER_DWJ h , CX_ORDER_ITEM d
WHERE d.parent_order_id = h.row_id

给View赋权

GRANT SELECT ON detail TO SSE_ROLE;
  1. 用向导创建External Table,如下图选择

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  1. 表里面需要有一个可以作为id的唯一列,将唯一列的system field mapping设置为Id,如下图所示
    在这里插入图片描述

  2. 新建BC,选择刚才建的Table字段即可
    在这里插入图片描述

  3. 至此BC已可以正常使用,配置相应的Applet,View,Screen,BO即可,可以作数据展示或者数据处理结果展示等。

2. VBC的创建

  1. 不要用向导,直接在bc界面New。不多做说明。
  2. 在BC下面新建Field,不要填Column,PickList等可以正常进行配置。
  3. 正常新建Applet,注意所有字段都要要勾上runtime

四、Import Object配置

Import Object的作用就是通过CSV文件导入记录

  1. 把Import Object对象从Object Explorer中调出来,并创建一个Import Object
    对象,BC填写你需要导入的BC
    在这里插入图片描述

  2. 在Import Field中选择你可能需要导入的Field
    在这里插入图片描述

  3. 创建导入源(建两个只是为了测试,一般用一个就行)
    在这里插入图片描述

  4. 定义导入源的Field,即需要导入的字段
    在这里插入图片描述

  5. 定义Field对应的CSV文件的列名在这里插入图片描述

  6. 制作导入文件, 本次是用的导出文件的格式作的导入文件在这里插入图片描述

  7. 导入设置如下在这里插入图片描述

五、eScript入门

提交订单功能的实现

需求:新建完订单后,我们实现一个提交按钮。该按钮只有在订单状态为“新建”时可点击。
点击新建按钮后,判断是否存在订单行。如果没有订单行,那么报错提示录入订单行。
如果验证通过,则把订单头的状态改为“已提交”,并且把所有订单行的价格改为“999”。

  1. 在需要添加按钮的Applet上添加UP字段如下,注意冒号与“SubmitOrder”间需要一个空格,“ SubmitOrder”应该与 Control 的 Method Invoked 属性值对应。
    注意: Value 的值控制按钮可用条件,为真(TRUE) 时按钮可用,为假时(FALSE)按钮不可用。这里可以设置相应的条件来控制按钮是否可用,例如这个 Applet 所在的 BC 有一个字段“Status”,是值列表字段,其中有一个值是“导入”,当将 Value 设
    置成: [Status]=”导入” 表示在 Applet 上选中某一条记录,当这条记录的“Status”字段值不是“导入”时,按钮将不
    可用,当“Status”字段值是“导入”时,按钮可用。
    提示: 这里仅是方便说明问题,所以硬编码写了“导入”两个汉字,实际应用中应当用 LookupValue 形式,如下:
    [Status]=LookupValue(“STATUS_TYPE”,”import”)
    NGC_ORDER_TYPE 表示这个静态值列表的类型
    Incomplete表示对应的独立源代码在这里插入图片描述

  2. 添加Control,HTML Type与UP设置的值对应,然后把按钮添加到Layout上在这里插入图片描述

  3. 创建BS,External Use: Y(能被代码或者工作流调用,一般建立的 BS 都应该勾上),
    在这里插入图片描述

  4. 在Business Service Method下添加方法:SubmitOrder,Display Name: 提交订单。在这里插入图片描述

  5. 在SubmitOrder方法下添加输入输出参数:OrderId在这里插入图片描述

  6. 选择NGC Order Header Service,Edit Server Script,在function Service_PreInvokeMethod (MethodName, Inputs, Outputs)添加以下代码:


function Service_PreInvokeMethod (MethodName, Inputs, Outputs)

{

//为了保证代码的健壮性,function开始前应使用try{}catch(e){}finally{}来捕获并处理异常。
try

{

	//每个客户化BS开头定义事务,以确保数据的完整性
	
	//定义事务控制
	
	var psTranIn = TheApplication().NewPropertySet();
	
	var psTranOut = TheApplication().NewPropertySet();
	
	var bsTran = TheApplication().GetService("EAI Transaction Service");
	
	
	//开始事务
	
	bsTran.InvokeMethod("BeginTransaction", psTranIn, psTranOut);
	
	
	if (MethodName == "SubmitOrder")

{

	SubmitOrder(Inputs, Outputs);

}
	
	//如果逻辑正确结束,提交事务
	
	//正常结束,提交事务
	
	psTranIn.SetProperty("Abort", "false");
	
	bsTran.InvokeMethod("EndTransaction", psTranIn, psTranOut);

}

	catch(e)

{

	//如果捕获到异常,回滚事务
	
	//捕获异常,回滚事务
	
	psTranIn.SetProperty("Abort", "true");
	
	bsTran.InvokeMethod("EndTransaction", psTranIn, psTranOut);
	
	TheApplication().RaiseErrorText(e.message);

}

	finally

{

	//程序结束时,必须释放所有新创建的对象型变量
	
	//释放对象
	
	psTranIn = null;
	
	psTranOut = null;
	
	bsTran = null;

}

	//所有客户化的BS都要返回CancelOperaton
	return (CancelOperation);

}


  1. 我们把提交订单的逻辑封装在BS的一个SubmitOrder的function里。在

BS里添加function:展开general,在declarations里添加以下代码:

//提交订单的逻辑

//输入参数:OrderId,需要提交的订单的Id

function SubmitOrder(Inputs, Outputs)

{

try

{

	//获取订单BO,BC
	
	var boOrder = TheApplication().GetBusObject("HAND Order");
	
	var bcOrder = boOrder.GetBusComp("HAND Order");
	
	var bcItem = boOrder.GetBusComp("HAND Order Item");
	
	
	//获取参数
	
	//GetProperty()是Property的一个最重要的方法之一,它的作用是获取 Property Set里的某个键的值。我们这里是获取输入参数OrderId的值。
	
	var orderId = Inputs.GetProperty("OrderId");
	
	
	//根据输入参数OrderId查询出需要提交的订单

with (bcOrder)

{

	//从下面一句开始到ExecuteQuery,是最常用的脚本BC查询
	
	操作步骤
	
	//激活字段,查询前要激活所有你需要获取或者设置值的字段
	
	ActivateField("Order Status");
	
	//设置安全性,结合
	
	安全性的知识理解。代码中新开的BC实例一般用AllView安全性,
	
	确保能查到数据。但是界面上的实例不可更改安全性
	
	SetViewMode(AllView);
	
	//清空查询条件
	
	ClearToQuery();
	
	//设置查询条件,这里有两种设置查询条件的方法,SetSearchSpec和SetSearchExpr,我们建议使用SetSearchExpr,具体原因后续再分析
	
	//SetSearchSpec("Id", orderId);
	
	SetSearchExpr("[Id] = '" + orderId + "'");
	
	//执行查询
	
	ExecuteQuery(ForwardOnly);
	
	//查询完成后,通过FirstRecord定位到查询结果的第一条记录,如果查询不到任何记录,则FirstRecord方法会返回false

if (!FirstRecord())

	throw "找不到订单Id " + orderId + " !";

}


//查询订单下的订单行

with (bcItem)

{
 

	ActivateField("Item Status");
	
	//这里可以不需要对订单行设置头Id的查询条件,因为在获取BC时,订单行被BO里的Link限制为订单头的子,该条件会自动附加
	
	ClearToQuery();
	
	ExecuteQuery(ForwardOnly);
	
	
	var bLineFound = FirstRecord();
	
	
	//验证如果不存在至少一条订单行,报错
	
	if (!bLineFound)
	
	throw "请先录入订单行再提交!";
	
	
	//以下是最典型的通过while循环查询出的记录做操作的例子
	
	//循环所有订单行,更新订单行状态为待发运
	
	var TO_BE_SHIPPED =
	
	TheApplication().InvokeMethod("LookupValue","HAND_ORD_ITEM_STATUS", "To Be Shipped");
	
	while (bLineFound)

{

	//SetFieldVaue是设置BC Field的值的方法
	
	SetFieldValue("Item Status", TO_BE_SHIPPED);
	
	//WriteRecord是保存记录的方法
	
	WriteRecord();
	
	//NextRecord是把记录定位到查询结果的下一条记录,如果已经是最后一条(即不存在下一条),返回false,跳出while循环
	
	bLineFound = NextRecord();

}

}


	//更新为订单行后,更新订单头状态

	with (bcOrder)

{
	
	var PENDING =
	
	TheApplication().InvokeMethod("LookupValue", "HAND_ORD_STATUS", "Pending");
	
	SetFieldValue("Order Status", PENDING);
	
	WriteRecord();

}


}

	catch(e)

{

	//捕获异常,报错

	throw e;

}

	finally

{

	//释放对象变量
	
	bcItem = null;
	
	bcOrder = null;
	
	boOrder = null;

}

}

  1. BS的调用方法1:同样在NGC Order Header List Applet的里修改脚本PreInvokeMethod,如下:
function WebApplet_PreInvokeMethod (MethodName)

{

//提交订单

if (MethodName == "SubmitOrder")

{

try

{
	
	//获取Applet对应的BC实例
	
	var bcOrder = this.BusComp();
	
	
	//调用前先做一次界面的保存
	
	bcOrder.WriteRecord();
	
	
	//创建BS的输入参数和输出参数的Property Set
	
	var psIn = TheApplication().NewPropertySet();
	
	var psOut = TheApplication().NewPropertySet();
	
	
	//设置输入参数OrderId的值为当前光标选中的订单头Id
	
	psIn.SetProperty("OrderId", bcOrder.GetFieldValue("Id"));
	
	
	//获取BS
	
	var bsOrdSvc = TheApplication().GetService("NGC Order Header Service");
	
	
	//调用BS的方法SubmitOrder
	
	bsOrdSvc.InvokeMethod("SubmitOrder", psIn, psOut);
	
	
	//注意,SNTO Order BC的Class必须是CSSBCBase或者其子类,否则不支持RefreshRecord方法
	
	//此处为什么要对记录做刷新呢?因为BS里更新数据时基于一个全新的实例去更新的,
	
	//并不影响当前界面的实例。为了使当前界面的实例能反馈给用户处理结果(订单状态字段改为“已提交”)
	
	//因此需要刷新当前界面的实例
	
	bcOrder.InvokeMethod("RefreshRecord");
	 
	//客户化方法,返回CancelOperation
	
	return (CancelOperation);

}

	catch(e)

{

	TheApplication().RaiseErrorText(e.message);

}

	finally

{

	//释放对象
	
	psIn = null;
	
	psOut = null;
	
	bsOrdSvc = null;
	
	bcOrder = null;

}

}

//Hello World方法

	else if (MethodName == "HelloWorld")

{

	TheApplication().RaiseErrorText("Hello World");
	
	return (CancelOperation);

}

	return (ContinueOperation);

}

  1. BS的调用方法2:配置三个UP,Named Method在这里插入图片描述

多选删除按钮的实现

在订单行的删除按钮上新增多选删除特性,在不改变按钮原有功能和外观的情况下,可以实现一次删除所有选中的记录。
实现过程以及代码略。

撤销按钮的实现

实现在订单头界面一键删除所有订单行,并且修改订单状态为未提交。
实现过程以及代码略。

同步按钮的实现

同步订单头的产品名称和Id到对应订单行,产品种类是PIcklist字段,自动为所有订单行Pick订单头的产品。
实现过程以及代码略。

MVG添加按钮的实现

实现MVG字段的添加,以及设置主键的功能。
实现过程以及代码略。

MVG删除按钮的实现

实现MVG字段删除关系的功能。
实现过程以及代码略。

代码实现计算字段

用BC Field的Calculate字段调用BS方法,实现不用配置UP也能实现计算的功能,既节约了性能成本又可以实现代码复用。

遇到问题及其解决方案

  1. VIew 与Applet做关联,然后编辑布局,将添加的Applet拖进去
    在这里插入图片描述

  2. 数据库sql语句报错
    创建中间表时,默认字段会带空格,无法使用,需要修改。
    检查Table是否正确check in和apply到服务器,修改前check out,修改后apply。

  3. 导入数据时显示文件无法使用或格式不匹配,无法找到与siebel的字段映射
    检查Import Field字段和Applet上显示的字段是否一致
    先导出,使用导出的文件格式填写数据再导入

  4. VBC无法正常显示
    注意自定义字段不要与系统字段重名

  5. Import Object无法正常导入
    文件格式问题,可以导出之后清空数据添加自己的数据
    字段命名问题,字段一般要和BC上显示的名称一致,便于映射

  6. eScript无法正常执行
    检查使用的字段是否激活
    检查属性名称是否对应

  7. 动态PickList只读,能看不能选
    检查字段对应问题,一般要用唯一字段ID

  8. MVG按钮代码无法设置PRIMARY KEY
    View Mode安全性问题,取消安全性设置即可

  9. MVG按钮代码,新建记录可以指定PRIMARY KEY,原有记录的PRIMARY KEY无法被修改
    级联删除的bug问题,实体字段没有被删除以及覆盖,获取管理员权限,手动设置字段为空。

  10. BC Script 无限循环
    BC的代码不能写this,否则会造成死循环
    可以这样写:

			SetSearchExpr("[Id] = '"+this.GetFieldValue("Id")+"'");
			ExecuteQuery(ForwardOnly);
			for ( var j = FirstRecord(); j; j = NextRecord() ){
			var bcOrderMVG = GetMVGBusComp("Position Name");
	}	
  1. BC Script 引用的值无法正常显示到界面,代码执行正常但无法生效
    return (CancelOperation);要写在标准方法里,否则自己的方法还会被覆盖。
function BusComp_PreGetFieldValue (FieldName, &FieldValue)
{
	if(FieldName == "Position Name"){
		//调用自定义方法,然后一定要return cancel
		allPos(FieldName, FieldValue);
		return (CancelOperation);
	}
	return (ContinueOperation);
}
  1. 写代码的时候注意写入数据要保存BC,否则无效
		bcMVG.SetFieldValue("SSA Primary Field", "Y");
		bcMVG.WriteRecord();
  1. DEBUG的时候经常不能在断点停顿
    一般是由于程序走不到断点处,检查判断逻辑和流程。
    系统bug,解决办法是关闭浏览器,关闭所有编程窗口重新编译,然后重新打断点
  2. 在浏览器debug的一个方法记录
    • 开发环境选择 管理-业务服务(B) ——模拟器
    • 服务名称选择自己的BS名,再选择要测试的方法
    • 输入参数要与**Inputs.GetProperty(“OrderId”);**内容一致,点击物业名称进行配置
    • 点击运行即可测试
      在这里插入图片描述

心得总结

DEBUG是开发过程中至关重要的一步,但是TOOLS的编码和DEBUG工具并不算好用,所以在学习过程中浪费了一些时间。不过好在有经验之后,大体上也能定位到问题在哪里,所以总体体验下来,SIEBEL开发是需要一定经验积累的。一是比较小众,网上资料和帖子比较少,很难上网找到解决方案;二是开发工具需要一个熟悉的过程,对于它的特性以及BUG等都需要摸索一下。
多做,多做,多做。做过的东西当时是会了,但是过一段时间非常容易遗忘,特别是SIEBEL配置,过程细节比较多,不同功能配置都各不相同,漏了一个环节就直接跑不起来,报错信息也非常不好定位问题所在。所以还是要多实战多做几遍,也能发现一些细节问题,记录也是必要的,遗忘可以快速捡起来。
刚学eScript的时候,遇到什么问题都想看看有没有对应的API能用,就去查开发手册,结果未必能找到对应的API。后来发现通过配置就很简单能够实现这个功能。有时候目光不能太局限,SIEBEL是一个界面化的二次开发平台,要结合它的优点去做开发,配置和代码,哪个方便稳定性能好,就用哪个。我们的最终目的是实现功能,不管是通过什么方法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SIEBEL功能组件,eScript入门 的相关文章

  • 使用条件 SQL 统计每月汇总记录

    我有一张桌子 我们就叫他们桌子吧SUMMARYDATA NIP NAME DEPARTMENT STATUSIN STATUSOUT TOTALLOSTTIME A1 ARIA BB 2020 01 21 08 06 23 2020 01
  • 自动提取数据 - Oracle SQL Developer

    我通过 SQL Developer 连接到 Oracle 数据库 我想编写一个返回每月数据集的查询 然后将该数据提取到分隔文本文件中 我知道如何做到这一点就好了 我想知道是否有一种方法可以编写一个脚本来运行查询并在一年内逐月提取数据 这样我
  • 使用 .NET 中的类型化数据集将 SQL 参数传递给 IN() 子句

    首先道歉 因为该网站上有类似的问题 但没有一个直接回答这个问题 我在 VS 2010 中使用类型化数据集 我在数据集中创建一个 TableAdapter 查询如下 SELECT from Table WHERE ID IN IDs 现在如果
  • java库维护数据库结构

    我的应用程序一直在开发 所以偶尔 当版本升级时 需要创建 更改 删除一些表 修改一些数据等 通常需要执行一些sql代码 是否有一个 Java 库可用于使我的数据库结构保持最新 通过分析类似 db structure version 信息并执
  • 标量子查询包含多行

    我正在使用 H2 数据库并想要移动一些数据 为此 我创建了以下查询 UPDATE CUSTOMER SET EMAIL SELECT service EMAIL FROM CUSTOMER SERVICE AS service INNER
  • 分组和切换列和行

    我不知道这是否会被正式称为枢轴 但我想要的结果是这样的 Alex Charley Liza 213 345 1 23 111 5 42 52 2 323 5 23 1 324 5 我的输入数据采用这种形式 Apt Name
  • 一个表可以有多个主键吗?

    我现在很困惑 也许你可以帮助我更好地理解这个问题 即一个表可以有两个主键 如果是 那么如何 如果没有 那为什么 您询问是否可以有多个主键field你当然可以 您只能有一个主键 但它可以包含唯一标识行所需的任意数量的列 创建表时使用类似这样的
  • 带有可变 WHERE 子句的批量 UPDATE 表

    我有一堆值对 foo1 bar1 foo2 bar2 我想做一堆更新 将 foo 列设置为 foo1 其中 bar 列为 bar1 我正在使用 psycopg2 在 Python 中执行此操作 我可以executemany与查询UPDATE
  • 更好地理解 SQL Server 中的架构

    就像标题一样 我还是一个SQLServer菜鸟 当我创建表 Mytable 时 数据库中显示 dbo Mytable 但有人能让我更好地理解模式吗 另外 在 Server 2008 TSQL 一书中 Itzik 说 在你的数据库中 表属于模
  • Oracle SQL 函数中可以有 commit 语句吗

    在 SQL 函数中使用 COMMIT 语句是否可能 有意义 从技术上来说 答案是肯定的 你can请执行下列操作 create or replace function committest return number as begin upd
  • Oracle:按月分区表

    我的解决方案 德语几个月 PARTITION BY LIST to char GEBURTSDATUM Month PARTITION p1 VALUES JANUAR PARTITION p2 VALUES Februar PARTITI
  • 在同一查询中选择 Count of ip 和 Count of DISTINCT ip

    我有一个这样的表结构 TABLE NAME counter id datetime url ip 1 2013 04 12 13 27 09 url1 ip01 2 2013 04 13 10 55 43 url2 ip02 3 2013
  • SQL 标准是否允许函数名和括号之间有空格

    检查一些 RDBMS 我发现类似的事情 SELECT COUNT a SUM b FROM TABLE 允许 注意聚合函数和括号之间的空格 谁能提供一个指向 SQL 标准本身定义的指针 任何版本都可以 编辑 以上在postgres中工作 m
  • ORA-12728: 正则表达式中的范围无效

    我想检查表中是否插入了有效的电话号码 所以我的触发代码在这里 select start index into mob index from gmarg mobile operators where START INDEX substr ne
  • SQL查询查找具有特定数量关联的行

    使用 Postgres 我有一个架构conversations and conversationUsers Each conversation有很多conversationUsers 我希望能够找到具有确切指定数量的对话conversati
  • 如果 Oracle SQL 中存在视图,则删除视图[重复]

    这个问题在这里已经有答案了 我是 Oracle 数据库系统的新手 Oracle 12c 中以下 SQL 语句的等效项是什么 DROP VIEW IF EXIST
  • 如何使用一个命令删除 SQL 数据库中的所有索引?

    那么 如何通过一条命令删除 SQL 数据库中的所有索引呢 我有这个命令可以获取所有 20 个左右的 drop 语句 但是如何从这个 结果集 运行所有这些 drop 语句呢 select from vw drop idnex 给我相同列表的另
  • MySQL“列计数与第 1 行的值计数不匹配”是什么意思

    这是我收到的消息 ER WRONG VALUE COUNT ON ROW 列计数与第 1 行的值计数不匹配 这是我的全部代码 我的错误在哪里 DROP TABLE student CREATE TABLE employee emp id I
  • 更改表添加列并在同一条件 IF 语句中更新新列

    我正在尝试添加列并在同一 if 语句中更新它 BEGIN TRAN IF NOT EXISTS SELECT 1 FROM sys columns WHERE Name N Code AND Object ID Object ID N Te
  • SQL Server 中离线索引重建和在线索引重建有什么区别?

    重建索引时 有一个选项ONLINE OFF and ONLINE ON 我知道当ONLINE模式打开时 它会复制索引 切换新查询以利用它 然后重建原始索引 使用版本控制跟踪两者的更改 如果我错了 请纠正我 但是 SQL 在离线模式下会做什么

随机推荐

  • (12)Spring框架——MyBatis的学习之关联映射

    目录 一 知识点 1 配置文件元素 二 概述 1 项目结构 2 描述 三 实例 1 mybatis config xml 2 db properties 3 log4j properties 4 mapper 1 IdCardMapper
  • 三、Python学习(二)海龟模块turtle画笔介绍及命令详解(画圆)

    1 画笔的状态 在画布上 默认有一个坐标原点为画布中心的坐标轴 坐标原点上有一只面朝x轴正方向小乌龟 这里我们描述小乌龟时使用了两个词语 坐标原点 位置 面朝x轴正方向 方向 turtle绘图中 就是使用位置方向描述小乌龟 画笔 的状态 2
  • MAC中import的maven工程无法识别java程序以及依赖包无法加载等问题的解决办法

    maven工程无法识别java程序以及依赖包 1 问题背景 2 问题截图 3 问题分析 4 问题解决 不想浪费时间就直接看4 4 前三步是我摸索的过程 4 1 删除已有的 idea文件 重新import工程 无效 4 2 删掉该maven工
  • Qt样式表 基础篇(1)

    一 什么是Qt样式表 Qt样式表是一种强大的Qt机制 除了通过子类QStyle已经可以实现的功能之外 它还允许自定义小部件的外观 Qt样式表的概念 术语和语法深受HTML层叠样式表 CSS 的启发 但同时适应了Qt 的小窗体部件 二 概述
  • opencv中的split函数

    split函数的功能是通道分离 原型 void split const Mat src Mat mvBegin void split InputArray m OutputArrayOfArrays mv 用法很显然 第一个参数为要进行分离
  • Global Illumination_SDF Generate & Visualize & Shadow

    Signed Distance Field 有向距离场 简称SDF 这其实是图形学中非常常用的数学概念 数学上来说 是定义在空间中的一个标量场 标量值为空间一点到曲面的距离 曲面外的点为正值 曲面上的点为0 曲面内的点为负数 对于需要渲染的
  • kali linux基础配置和输入法转换

    一 修改密码 1 打开终端 terminal 进入方式 桌面左上角 桌面右键 Ctrl Alt T 输入sudo passwd root 然后回车 先输入原账户密码 回车 再输入root密码 回车 再一次重复输入 回车 设置完成 二 修改系
  • GLSL基础

    OpenGL Shading Language GLSL作为一种着色语言是纯粹的和GPU打交道的计算机语言 因为GPU是多线程并行处理器 所以GLSL直接面向SIMD模型的多线程计算 GLSL编写的着色器函数是对每个数据同时执行的 每个顶点
  • “$Bitmap 有标记已使用的未用簇”

    前几天在电脑上用 DiskGenius 给移动硬盘分区的时候出现了这个错误 如下图所示 解决方法 在 cmd 命令行窗口中输入如下代码 chkdsk f x c PS 其中 c 为需要进行操作的盘符 根据实际盘符修改 操作完成后再进行分区就
  • socket网络编程学习笔记(listen、accept、recv)

    listen 函数 功能 将套接字置于侦听传入连接的状态 语法 int WSAAPI listen SOCKET s int backlog 参数一 标识绑定的未连接套接字的描述符 参数二 挂起连接队列的最大长度 如果设置为 SOMAXCO
  • ABAP学习(16):ABAP2XLSX,操作excel

    ABAP2XLSX ABAP2XLS是一个操作EXCEL的开源项目 相比较OLE2和DOI方式操作excel更加方便 ABAP中搜索ZDEMO EXCEL 搜索Program可以查看SAP提供的示例程序 实现多种Excel 1 创建exce
  • 切片传递与指针传递到底有啥区别

    提出疑问 在Go的源码库或者其他开源项目中 会发现有些函数在需要用到切片入参时 它采用是指向切片类型的指针 而非切片类型 这里未免会产生疑问 切片底层不就是指针指向底层数组数据吗 为何不直接传递切片 两者有什么区别 例如 在源码log包中
  • Filter(过滤器)

    文章目录 1 Filter 的基本作用 2 Filter 的基本使用 3 Filter 的执行流程 4 Filter 执行需要注意的细节 4 1 拦截路径的配置 4 2 拦截路链 过滤器链 5 案例小结 登录验证 6 小结 1 Filter
  • 最近5年183个Java面试问题列表及答案[最全]

    Java 面试随着时间的改变而改变 在过去的日子里 当你知道 String 和 StringBuilder 的区别 String 类型和 StringBuffer 类型的主要性能区别其实在于 String 是不可变的对象 因此在每次对 St
  • Java使用itext 生成PDF,以生成个人简历为例

    在日常的应用中经常会有需求 生成pdf或者word文档 常见的第三方工具有Apache的poi 以及itext等等 这里使用itext生成pdf 以个人简历作为示例 了解itextde 使用 第0步 效果 第一步 引入依赖包
  • Latent Dirichlet Allocation(LDA)主题模型理论

    LDA是给文本建模的一种方法 属于生成模型 生成模型是指该模型可以随机生成可观测的数据 LDA可以随机生成一篇由N个主题组成的文章 通过对文本的建模 可以对文本进行主题分类 判断相似度等 LDA通过将文本映射到主题空间 即认为一篇文章有若干
  • python嵌套列表转为字典_python如何把列表变字典

    现在有一个列表 list1 key1 key2 key3 把他转为这样的字典 key1 1 key2 2 key3 3 python将列表变字典的两种方法 1 方法 再构造一个列表list2 1 2 3 使用zip转换为元组后 在将元组转换
  • angular原理及模块简介

    本人前端小白 奈何在公司在做一个PC端的程序 用angular写 不得不自学了一下angular框架 虽然在工作过程中勉强勉强够了 但是觉得既然用了就稍微了解得全面一点 所以花了几个晚上看了一下angular的developer guide
  • Mysql 参数autoReconnect=true 解决8小时连接失效

    1 即使在创建Mysql时url中加入了autoReconnect true参数 一但这个连接两次访问数据库的时间超出了服务器端wait timeout的时间限制 还是会CommunicationsException The last pa
  • SIEBEL功能组件,eScript入门

    文章目录 前言 学习任务 一 MVG的配置与学习 1 1 M的MVG配置 以统计订单行数量功能为例 1 M M的MVG配置 二 View Mode Visibility配置 1 Personal安全性 2 Position安全性 三 EBC