Przede wszystkim jestem nowicjusz Oracle, więc wybacz mi, jeśli to głupie pytanie ...Wykonywanie Oracle proc przechowywanej jako inny użytkownik
mam schematu o nazwie „CODE” z przechowywanych proc, który wykonuje arbitralny SQL (na razie proszę zignorować potencjalne problemy bezpieczeństwa związane z tym). SQL, który jest przekazywany, wybierze dane; ale wszystkie dane znajdują się w schemacie A, B lub C - ale SQL wybierze tylko JEDEN schemat na raz.
Na przykład: Użytkownik typu A tworzy ciąg "SELECT * FROM A.USERTABLE" - podczas gdy użytkownik typu B tworzy ciąg "SELECT * FROM BUSESSABLE".
Co próbuję zrobić, to pozwolić użytkownikowi nie jawnie określić ich schematu. W frontowej aplikacji .net; Już wiem, czy są one typu A, B czy C. Chcę, żeby wszystkie trzy po prostu wpisały "WYBIERZ * Z NADZOROWANEGO".
Problem polega na tym, że nie wiem, jak to zrobić. Moja aplikacja może uruchamiać tylko proc w schemacie "CODE" - więc nie mogę po prostu skopiować kodu i pozwolić użytkownikowi na wywołanie "A.ExecuteSQL".
Próbowałem kilku rzeczy; ale nic nie zadziałało tak daleko. Chcę, aby proces ExecuteSQL pozostał w schemacie CODE; ale gdy "PIERWSZE" zostanie przekazane, muszę wiedzieć, że czasami oznacza to A.USERNAME, a czasami B.USERNAME.
Wszelkie sugestie?
Jak to działa? Pierwsza aplikacja wykonuje tę instrukcję "ALTER" lub wykonuje ją w procedurze 'CODE'? – Guru
http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:588045400346317188 ma więcej informacji. Wygląda na to, że możesz to zrobić za pomocą dynamicznego sql (wykonaj natychmiastowo) wewnątrz przechowywanego proc. –
@Guru: Zobacz link do strony Rob P, –