Hi I am using Oracle SQL Developer 3.1.06 and connected to 11g EE. Whenever I will click edit in any procedure in the left pane, showing "create or replace" in the right side window.. I am not able to see any procedure code. I am able to see the procedure in same login in toad.
Are you sure the user you are logging in with is the owner of the objects?
You can check the owner by looking into the ALL_OBJECTS table:
SELECT * FROM ALL_OBJECTS WHERE OBJECT_NAME LIKE '%MYOBJECT%'
The user you are logging into could perhaps only have limited view rights preventing you from accessing the code. If you found the owner, you could browse in the connection window to other users and select the procedure from the relevant user. You should then be able to see everything.
I have a user called LOW_PRIVS.
They only have RESOURCE and CONNECT.
I create a procedure.
I open procedure.
Here is what we run to get the source code on a local procedure:
WITH src AS (
SELECT ROWNUM,
line,
text,
origin_con_id
FROM sys.all_source
WHERE type = :type
AND owner = :owner
AND name = :name
)
SELECT text
FROM src,
(
SELECT MAX(origin_con_id) max_orig
FROM src
)
WHERE origin_con_id = max_orig
ORDER BY line
We're hitting the ALL_SOURCE view that belongs to SYS. That should work for anyone.
But test and verify.
Note: I am on version 18.2 - that is many years newer than version 3.1. For best support, upgrade.
Related
it's possible to define an alias for a stored procedure (sql-native)?
In the documentation, reference is made only to: SEQUENCE and TABLES
1) CREATE PROCEDURE OWXXCOLL.STORED1()
2) CREATE ALIAS DB2C.STORED1 FOR OWXXCOLL.STORED1;
3) CALL DB2C.STORED1();
EDIT 2021-05-14
The original question arises for the following problem (I was hoping to get away with using aliases)
Intro
I have defined a native SP
The OWXXCOLL schema is the same one I also use for tables/index...
(I noticed that the tables also have different aliases)
CREATE PROCEDURE OWXXCOLL.STORED1(...)
LANGUAGE SQL
ISOLATION LEVEL CS
WLM ENVIRONMENT FOR DEBUG MODE WLMENV1
ALLOW DEBUG MODE
BEGIN
...
END#
I also modified the cobol program (name:PGMSTO1) to call the Stored with the CALL statement (without qualifier)
EXEC SQL
CALL STORED1 (...)
END-EXEC.
The problem
The various table accesses (SELECT) work correctly BUT When I run the PGMSTO1 the call to the Stored ends with sqlcode -440
NO AUTHORIZED PROCEDURE BY THE NAME STORED1 HAVING COMPATIBLE ARGUMENTS WAS FOUND<
The error comes from the fact that it is not using the owner OWXXCOLL but DB2C (DB2C is user who scheduled the jcl/batch)
If I enter the qualifier (OWXXCOLL) the call it's OK.
I don't understand what to check and what configurations are missing.
Thanks
The cobol program (PGMSTO1) that calls the stored procedure has the following BIND parameters:
COLLID NAME OWNER CREATOR QUALIFIER DYNAMICRULES PATHSCHEMAS
OWXXCOLL PGMSTO1 DB2C DB2C FPXX B "DB2C"
"DB2C" path is used to resolve unqualified stored procedure
I will need to modify the bind parameter "PATH".
I will try to ask to add my schema as well (OWXXCOLL)
PATH("OWXXCOLL","DB2C")
I have a procedure that identifies each locked
account that was locked because of invalid login attempts. However the sp is creating with compilation errors: "ORA-00942: table does not exist". If I run the select statement by itself it works fine but within the sp. Can anyone help?
Create or replace PROCEDURE IdentifyLockedAccounts(p_recordset OUT SYS_REFCURSOR) AS
BEGIN
OPEN p_recordset FOR SELECT USERNAME FROM DBA_USERS WHERE ACCOUNT_STATUS = 'LOCKED' OR ACCOUNT_STATUS = 'LOCKED(TIMED)';
END IdentifyLockedAccounts;
/
Your schema probably has SELECT privilege on DBA_USERS via some role (SELECT_CATALOG_ROLE for instance) - that is why you are able to run it via SQL client.
Roles are not enabled during the compilation of plsql/views therefore you have to grant SELECT ON DBA_USERS directly to schema to be able to use it in stored procedure.
GRANT SELECT ON DBA_USERS to YOURSCHEMA;
Writing in Delphi 10 Seattle, targeting the 'pusher' as Windows, and the receiver as iOs (for now). The aim is to be able to push a message to a specific user without relying on broadcast and client side filtering.
I've managed to achieve the following so far:
1. Send a broadcast push to my iOS app
2. Login as a user on my iOS app
3. Create a pointer in my Installation record for User -> _User
That's as far as I can get in Delphi. From what I understand, I have to update the Installation record on login to reflect the installations logged in user.
I cannot find out how to do that in Delphi's Parse/BAAS objects. What seems to be missing is that I can't get the logged in users Installation ID. I assume if I could I could then update that via the TBackendStorage Class.
Any help would be appreciated.
I've cross posted this question to Embarcadero forums and community site.
To retrieve the User Object Id
var
ACreatedObject: TBackendEntityValue; // REST.Backend.MetaTypes
begin
BackendUsers.Users.LoginUser('donald','#duck99',ACreatedObject);
fUserObjectId:=ACreatedObject.ObjectID;
end
To Update the Installation with the User Object iD
Assuming you have a column 'User' in your Installation table on Parse as a pointer to _User class.
Within the PushEventsDeviceRegistered Event:
var
JO,JOP:TJSonObject; // System.JSON
O:TBackendEntityValue; // REST.Backend.MetaTypes
begin
if PushEvents.InstallationValue.TryGetObjectID(fInstallationObjectId) then
begin
try
JO:=TJSONObject.Create;
JOP:=TJSONObject.Create;
JOP.AddPair('__type','Pointer');
JOP.AddPair('className','_User');
JOP.AddPair('objectId',fUserObjectId);
JO.AddPair('User',JOP);
BackendStorage.Storage.UpdateObject('_Installation',
fInstallationObjectId,JO,O);
finally
JO.Free;
end;
end
end;
To Target the Push Message Based on User Name
Note, you could create the target via JSON objects,but I've used a string with formatting here.
const
Target = '{"where":{"User":{"$select":{"query":'+
'{"__type":"Pointer","className":"_User","where":'+
'{"username":"%s"}},"key":"objectId"}}}}';
begin
BackendPush.Target.Text:=Format(Target,['donald']);
BackendPush.Message:='Gratz on the Election Result';
BackendPush.Push;
end
Non Local Variables/Declarations
The following Delphi BaaS components were created at Design time.
ParseProvider: TParseProvider;
PushEvents: TPushEvents;
BackendUsers: TBackendUsers;
BackendStorage: TBackendStorage;
BackendPush: TBackendPush;
The following class (or global) variables are referred to:
fUserObjectId:string; // Must be set before push registration is activated.
fInstallationObjectId:string;
NOTE: The original code is fully tested, however I've cut/paste (and edited to remove non-relevant stuff) so forgive me if there are any cut/paste errors.
I've been trying to find where a user's last used printer is stored so that I can clear this usage data (as a few users have an issue where the remembered printer keeps defaulting to the XPS writer, despite us having KB981681 installed & the printer being available; just not defaulted on certain AX forms).
I know this data's somewhere in the Usage Data, which I can browse via AX:
Microsoft Dynamics AX > Tools > Development Tools > Application Objects > Usage Data
AOT > System Documentation > Tables > SysLastValue > (right click) > Add-Ins > Table Browser
Or through SQL:
use AXDB
go
select *
from SysLastValue
where userid in
(
select id
from userinfo
where networkalias in ('userid1','userid2')
)
and elementname like '%print%'
and iskernel = 1
However so far I've not been able to guess which setting holds the last used printer information. Since the value field is of type image (i.e. a blob) I also can't search based on value.
Any advise on how to find this setting would be helpful.
Unfortunately there really isn't one "last used printer" stored, as much as each process packs and stores the last used print settings. Here is an example of how you can pull the last used print settings after posting a picking slip from the sales form.
static void JobGetPrinterSettingsPickList(Args _args)
{
container lastValues;
SalesFormLetter_PickingList pickList = new SalesFormLetter_PickingList();
SRSPrintDestinationSettings printSettings;
lastValues = xSysLastValue::getValue(curext(), curUserId(), UtilElementType::Class, classStr(SalesFormLetter_PickingList), formStr(SalesTable));
pickList.unpack(lastValues);
printSettings = new SRSPrintDestinationSettings(pickList.printerSettingsFormletter());
info(strFmt("%1", printSettings.printerName()));
info(strFmt("%1", printSettings.printerType()));
}
Edit: Ah I see you're having a specific issue. Check the pack/unpack and version of whatever object is having the issue. That is likely where the issue is. Or if it's on several things, check if they're all extended classes and you need to look at the parent class.
I tried to install orchard CMS the from source code. I opened it in VS 2012, and I m using Sql Server 2012.
I am geting the following error.
error text:
Setup failed: could not execute query
[ select rolerecord0_.Id as Id13_, rolerecord0_.Name as Name13_ from Test_Orchard_Roles_RoleRecord rolerecord0_ where rolerecord0_.Name=#p0 ]
Name:p1 - Value:Anonymous
[SQL: select rolerecord0_.Id as Id13_, rolerecord0_.Name as Name13_ from Test_Orchard_Roles_RoleRecord rolerecord0_ where rolerecord0_.Name=#p0]
I cant find any solution for this error. Where did I go wrong? How can I fix this error? When I choose built-in storage, it runs. Also, are there any disadvantages if I use the built-in one?
UPDATE (new error message)
Setup failed: could not execute query [ SELECT TOP (#p0) this_.Id as
Id17_2_, this_.Number as Number17_2_, this_.Published as
Published17_2_, this_.Latest as Latest17_2_, this_.Data as Data17_2_,
this_.ContentItemRecord_id as ContentI6_17_2_, contentite1_.Id as
Id16_0_, contentite1_.Data as Data16_0_, contentite1_.ContentType_id
as ContentT3_16_0_, contenttyp4_.Id as Id18_1_, contenttyp4_.Name as
Name18_1_ FROM Orchard_Framework_ContentItemVersionRecord this_ inner
join Orchard_Framework_ContentItemRecord contentite1_ on
this_.ContentItemRecord_id=contentite1_.Id left outer join
Orchard_Framework_ContentTypeRecord contenttyp4_ on
contentite1_.ContentType_id=contenttyp4_.Id WHERE contentite1_.Id =
#p1 and this_.Published = #p2 ] Name:cp0 - Value:2 Name:cp1 -
Value:True [SQL: SELECT TOP (#p0) this_.Id as Id17_2_, this_.Number
as Number17_2_, this_.Published as Published17_2_, this_.Latest as
Latest17_2_, this_.Data as Data17_2_, this_.ContentItemRecord_id as
ContentI6_17_2_, contentite1_.Id as Id16_0_, contentite1_.Data as
Data16_0_, contentite1_.ContentType_id as ContentT3_16_0_,
contenttyp4_.Id as Id18_1_, contenttyp4_.Name as Name18_1_ FROM
Orchard_Framework_ContentItemVersionRecord this_ inner join
Orchard_Framework_ContentItemRecord contentite1_ on
this_.ContentItemRecord_id=contentite1_.Id left outer join
Orchard_Framework_ContentTypeRecord contenttyp4_ on
contentite1_.ContentType_id=contenttyp4_.Id WHERE contentite1_.Id =
#p1 and this_.Published = #p2]
Before creating SQL Server database, set collocation as Latin1_General_100_CI_AS
Do this, right click to Database note on SQL Server management Tool and click to New Database. When you see the New Database window, type the database name and click to Option tab left hand side on New Database windows.
You will see Collocation combobox top of the New Database window. Change default to Latin1_General_100_CI_AS. And then run Orchard setup again.
Set up a new application pool in your IIS manager and have it run as an account with permissions to query your sql server. Then assign your orchard website to use that application pool. Here is a screen shot of where to set the identity of the application pool, click the "Advanced Settings" link to get to this menu:
In the "Process Model" section - set the Identity to an account with SQL server permissions. Set "Load User Profile" = 'false'. This will prevent the pool from trying to retrieve the user profile when running the orchard website.
I find that usually when I get that error message, it's because the query being executed has a syntax error, or table/column names don't match. If you can halt execution where the exception is thrown, you can check the InnerException to see if that provides more info. If not, just copy the SQL from the message, fill in the parameters #p0, #p1, #p2 with values, and try to run it in whatever tool you use to manually query your database. It will often give you a more helpful error message.