我们正致力于提取Sybase ASE 15.5版本的数据库DDL。我们在java中创建了一个执行ddl命令的示例。我们使用Sybase提供的ddlgen实用程序获得了ddl命令:
java -cp "mypath/lib/jconn4.jar;mypath/lib/dsparser.jar;mypath/lib/DDLGen.jar" com.sybase.ddlgen.DDLGenerator -Usa -Pmypassword -S192.123.13.111:5000 -Dmaster
上面的命令为用户sa
中存在的所有数据库对象生成DDL,我们也得到用户sa
与其他用户共享的对象列表:
Grant Select on dbo.mytable1 to anotheruserthansa
go
Grant Select on dbo.mytable2 to anotheruserthansa
go
现在我们想要通过用户名来共享对象的DDL,就像在我的情况下用户是anotheruserthansa
我们需要一些可以为用户生成DDL的命令,我们可能没有密码。 我们需要使用我的用户sa,密码和模式名称来获取DDL:anotheruserthansa
我们需要为用户sa
共享到{{1}的所有数据库对象生成ddl }}
就像我们在 Oracle 中使用查询一样:
anotheruserthansa
如何使用其架构获取共享对象的DDL?
答案 0 :(得分:0)
这可能是通过结合使用SQL查询来完成的,然后将参数传递给ddlgen
SELECT db_name()
, su.name
, so.type
, so.name
FROM sysusers su, sysobjects so
WHERE su.uid = so.uid
AND su.name = "[name of user you are looking for]"
然后,您可以将dbname,对象类型和对象名称传递到ddlgen
以生成DDL。
ddlgen -Usa -Sservername -Tobject_type -Nobject_name -Ddbname ...etc
仅供参考 - Sybase / SAP最佳实践建议不允许用户拥有数据库中的对象。建议所有数据库对象归dbo
所有。这不应与Oracle和SQL Server使用的模式概念混淆。 ASE不使用这些逻辑划分。