没有" dbcc procbuf()"会导致Python调用

2020-08-17 05:40发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


我正在尝试使用Python调用dbcc procbuf()来查找缓存存储过程的表,这些表通过查找以下返回行来进行修改:

用于插入的锁定策略
         db = 11 obj = 124002793锁=排他意图stat = 0x0
 

但是,在下面的Python程序中,dbcc procbuf命令没有返回任何结果(使用isql可以正常工作)。 任何可能知道原因的SAP Python专家? (例如,精美的消息处理程序选项?)

#!/opt/python-3.8/bin/python
 导入系统
 python_path_for_sybase = os.getenv(" SYBASE")+"/" + os.getenv(" SYBASE_OCS")+"/img/python/python34_64r/lib"
 sys.path.append(python_path_for_sybase)
 导入sybpydb
 server =" MYSERVER"
 db =" mydb"
 连接= sybpydb.connect(
              servername ='MYSERVER',user ='mylogin',password ='mypassword',
              dsn ='ChainXacts = false; ScriptName = mytest.py')
 cursor = connection.cursor()
 dbcc_procbuf_sql ="""
   dbcc traceon(3604)
   #参数是dbid,proc,...
   dbcc procbuf(16," myproc",1,1,1)
 ""
 cursor.execute(dbcc_procbuf_sql)
 return_rows = []
 尝试:
   return_rows = cursor.fetchall()
 除了sybpydb.ProgrammingError作为myerror外:
   print("调用fetchall时出错。可能找不到行")

 if(len(return_rows)> 0):
   对于return_rows中的return_row:
     print("返回的行=" + return_row)

 #这会返回"不可调用"错误
 #用于connection.messages()中的消息:
 #print(" dbcc procbuf msg:" +消息)

 cursor.close()
 connection.close()
 

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


我正在尝试使用Python调用dbcc procbuf()来查找缓存存储过程的表,这些表通过查找以下返回行来进行修改:

用于插入的锁定策略
         db = 11 obj = 124002793锁=排他意图stat = 0x0
 

但是,在下面的Python程序中,dbcc procbuf命令没有返回任何结果(使用isql可以正常工作)。 任何可能知道原因的SAP Python专家? (例如,精美的消息处理程序选项?)

#!/opt/python-3.8/bin/python
 导入系统
 python_path_for_sybase = os.getenv(" SYBASE")+"/" + os.getenv(" SYBASE_OCS")+"/img/python/python34_64r/lib"
 sys.path.append(python_path_for_sybase)
 导入sybpydb
 server =" MYSERVER"
 db =" mydb"
 连接= sybpydb.connect(
              servername ='MYSERVER',user ='mylogin',password ='mypassword',
              dsn ='ChainXacts = false; ScriptName = mytest.py')
 cursor = connection.cursor()
 dbcc_procbuf_sql ="""
   dbcc traceon(3604)
   #参数是dbid,proc,...
   dbcc procbuf(16," myproc",1,1,1)
 ""
 cursor.execute(dbcc_procbuf_sql)
 return_rows = []
 尝试:
   return_rows = cursor.fetchall()
 除了sybpydb.ProgrammingError作为myerror外:
   print("调用fetchall时出错。可能找不到行")

 if(len(return_rows)> 0):
   对于return_rows中的return_row:
     print("返回的行=" + return_row)

 #这会返回"不可调用"错误
 #用于connection.messages()中的消息:
 #print(" dbcc procbuf msg:" +消息)

 cursor.close()
 connection.close()
 
付费偷看设置
发送
4条回答
Bunny_CDM
1楼-- · 2020-08-17 06:13

嗨,

问题是因为返回的消息是EED令牌/警告消息。
这不是结果集或返回的行。

消息/警告示例:
cur.execute(" dbcc traceon(3604)")
cur.execute(" dbcc procbuf(1,myproc,1,1,1)")
对于conn.messages中的混乱:
print("%s"%mess [1] [0])
https://help.sap.com/viewer/a1576559612d4e39886fc0ad4e093074/16.0.3.8/en-US/b075d06dbbf91014b330b5c8e55314f8.html?q=python%20messages

https://help.sap.com/doc/4c40a79c93f4485ca2a01c5ba806c3.8 /en-US/Adaptive_Server_Enterprise_Programmers_Guide_for_Python_en.pdf

致谢,
Ryan

Nir深蓝
2楼-- · 2020-08-17 05:49

我不使用python,所以我什至不收0.02美元 对于以下情况:

' dbcc procbuf '不会生成实际的结果集,而是会生成大量(未格式化的)文本,这些文本会转储到输出中; 好奇:

-代码是否可用于'从sysobjects中选择count(*)'? [生成结果集]

-代码是否会因' print" Hello World!" '而失败? [不会生成结果集]

如果答案分别是"是"和"是",我想知道python是否具有不同的结构来管理未格式化为结果集的数据 ?

callcenter油条
3楼-- · 2020-08-17 06:10

嗯,当我在Perl中重新实现此问题时,我遇到了类似的问题。 没有为dbcc procbuf返回任何行。

我不得不更改程序以生成一个调用sqsh(或isql)的子进程。 这些实用程序* do *从dbcc procbuf返回行。

也许正在使用某种特殊的TDS数据包。 随便。

无需回复。

bbpeas
4楼-- · 2020-08-17 06:06

我收到的唯一消息是典型消息:

" <类'sybpydb.Warning'>,('DBCC执行完成。如果DBCC打印了错误消息,请与具有系统管理员(SA)角色的用户联系。\ n',2528))"

一周热门 更多>