Hej Eftersom du skriver i databaser forum misstänker jag du menar en extended procedure som finns i SQL-Server som heter xp_cmdshell ? Jag kör en Oracle databas. Finns det motsvarande för detta oxå. Hej. Hej, Hej igen. Hej HenkeKöra dos komando från en funktion.
Kan man köra ett doskomando från en funktion. Hur ser då det ut. Jag har testat med 'shell' och 'host'. Vet inte exakt hur det funkar. Sv: Köra dos komando från en funktion.
exempel
xp_cmdshell 'Dir C:\'Sv: Köra dos komando från en funktion.
DEt som jag vill göra är på ett ungefär som nedan.
IF extension = 'dwg' then "kopiera över en pdf-fil"
end IFSv: Köra dos komando från en funktion.
Om du har Oracle 8i eller senare så får du skriva en lagrad procedur i Java.
Om det är en tidigare version så vet jag inget sätt.
Lycka till.
/UffeSv: Köra dos komando från en funktion.
jag är inte säker men jag tror inte att Oracle-motorn får göra operativsystemanrop på det sätt som du vill göra. Däremot så får SqlPlus göra detta (kommer inte ihåg exakt kommando - är ett tag sedan jag gjorde det. Jag löste problemet genom att köra en extra sqlplus i en egen process (unix). Denna fick sedan lyssna på en "pipe" dit jag kunde skicka kommandon. Länk som kanske kan vara tilll nytta:
http://asktom.oracle.com/pls/ask/f?p=4950:8:4711359447916617644::NO::F4950_P8_DISPLAYID,F4950_P8_CRITERIA:16212348050,
Hoppas att detta hjälper dig.Sv: Köra dos komando från en funktion.
Oracle får inte göra någonting utanför databasen, så länge du inte har gett den tillstånd att göra detta.
Några exempel:
dbms_java.grant_permission( 'schema user', 'SYS:java.io.FilePermission', '<<ALL FILES>>', 'execute' )
dbms_java.grant_permission( 'schema user', 'SYS:java.io.FilePermission', 'some_file', 'read' )
Är inte säker på hur syntaxen ser ut för ett helt bibliotek.
Du kan använda java's "Runtime.getRuntime().exec(...)"
eller metoderna i java.lang.io.
Om du gör något som Oracle inte är behörig (av dig) att göra så
föreslår den ofta hur du ska göra för att tilldela rätt behöriget.
Lycka till
/UffeSv: Köra dos komando från en funktion.
Jag försökte skicka ett svar tidigare, men det funkade inte så jag
försöker igen. Hoppas det inte blir dubbla inlägg.
Kanske är det lättast om du gör det i ett SQL-script.
Då använder du, som du påpekade tidigare host( eller kanske & ) ex.
SQL> host copy C:\dir1\*.pdf C:\dir2\*.*
Om du vill använda c går det nog också bra, men jag har inte hunnit pröva själv.
Här kommer ett utdrag från UNIX-miljö som kanske måste anpassas till Win.
External Procedure Source Code
------------------------------
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void sh(char *);
void sh( char *cmd )
{
int num;
num = system(cmd);
}
Issue the following commands to compile the code and generate the shared
object in Solaris:
cc -G -c shell.c
ld -r -o shell.so shell.o
You can also use the demo_rdbms.mk makefile to build shared libraries
for use in external procedures. Using this method insulates you from
any Operating System specific dependencies (e.g., which flags to use
for ld).
For example:
In 8.0.X,
$ make -f demo_rdbms.mk extproc_nocallback SHARED_LIBNAME=shell.so OBJS=shell.o
In 8.1.X,
$ make -f demo_rdbms.mk extproc_no_context SHARED_LIBNAME=shell.so OBJS=shell.o
Library Definition
------------------
CREATE LIBRARY shell_lib is '/u11/home/lsupport/proc/shell.so';
/
Note: The directory in quotes is the current of location of the library that
was created in the steps above.
PL/SQL Wrapper Procedure
------------------------
create or replace procedure shell(cmd IN char)
as external
name "sh"
library shell_lib
language C
parameters (cmd string);
/
Execution
---------
SQL> exec shell('ls');
cli.trc exe_prba.sql prueba.mk shell.c.old
core listener.old prueba.o shell.o
dec2bin.c listener.ora prueba.so shell.so
dec2bin.c.old nena.lst prueba.sql shell.sql
dec2bin.o p.sql sal.1 shell.sql.old
dec2bin.so pepito.lst sal.2 sqlnet.log
dec2bin.sql prb sal.3 tnsnames.ora
dec2bin.sql.old prb.c salida.lst tnsnames.ora.old
envoltorio.sql prueba.c shell.c uno.sql
PL/SQL procedure successfully completed
###############################################
Bästa Hälsningar
Folke Larsson