BEGIN
TEMP_PROC();
--rollback;
END;
SEQUENCE in your database, which is a data object that multiple users can access to automatically generate incremented values. As discussed in the documentation, a sequence in Oracle prevents duplicate values from being created simultaneously because multiple users are effectively forced to "take turns" before each sequential item is generated.CREATE the table we'll be using:CREATE TABLE books ( id NUMBER(10) NOT NULL, title VARCHAR2(100) NOT NULL );
PRIMARY KEY constraint:ALTER TABLE books ADD ( CONSTRAINT books_pk PRIMARY KEY (id) );
SEQUENCE that will be utilized later to actually generate the unique, auto incremented value.CREATE SEQUENCE books_sequence;
TRIGGERS come in.event in modern programming languages, a TRIGGER in Oracle is a stored procedure that is executed when a particular event occurs.TRIGGER will be configured to fire when a table is updated or a record is deleted, providing a bit of cleanup when necessary.TRIGGER prior to INSERT into our books table, ensuring ourSEQUENCE is incremented and that new value is passed onto our primary key column.CREATE OR REPLACE TRIGGER books_on_insert BEFORE INSERT ON books FOR EACH ROW BEGIN SELECT books_sequence.nextval INTO :new.id FROM dual; END;
TRIGGER named books_on_insert and specifying that we want the trigger to fire BEFORE INSERT occurs for the books table, and to be applicable to any and all rows therein.SELECT the next incremental value from our previously created books_sequence SEQUENCE, and inserting that into the :new record of the books table in the specified .id field.FROM dual part is necessary to complete a proper query but is effectively irrelevant. The dualtable is just a single dummy row of data and is added, in this case, just so it can be ignored and we can instead execute the system function of our trigger rather than returning data of some kind.IDENTITY columns were introduced in Oracle 12c, allowing for simple auto increment functionality in modern versions of Oracle.IDENTITY column is functionally similar to that of other database systems. Recreating our above books table schema in modern Oracle 12c or higher, we'd simply use the following column definition.CREATE TABLE books ( id NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY, title VARCHAR2(100) NOT NULL );
| WebDAV Method | Notes |
|---|---|
| PUT | This section of the sample writes a string as a text file to the destination server as "foobar1.txt". Sending a raw string is only one way of writing data to the server, in a more common scenario you would probably open a file using a steam object and write it to the destination. One thing to note in this section of the sample is the addition of the "Overwrite" header, which specifies that the destination file can be overwritten. |
| COPY | This section of the sample copies the file from "foobar1.txt" to "foobar2.txt", and uses the "Overwrite" header to specify that the destination file can be overwritten. One thing to note in this section of the sample is the addition of the "Destination" header, which obviously specifies the destination URL. The value for this header can be a relative path or an FQDN, but it may not be an FQDN to a different server. |
| MOVE | This section of the sample moves the file from "foobar2.txt" to "foobar1.txt", thereby replacing the original uploaded file. As with the previous two sections of the sample, this section of the sample uses the "Overwrite" and "Destination" headers. |
| GET | This section of the sample sends a WebDAV-specific form of the HTTP GET method to retrieve the source code for the destination URL. This is accomplished by sending the "Translate: F" header and value, which instructs IIS to send the source code instead of the processed URL. In this specific sample I am only using text files, but if the requests were for ASP.NET or PHP files you would need to specify the "Translate: F" header/value pair in order to retrieve the source code. |
| DELETE | This section of the sample deletes the original file, thereby cleaning off all of the sample files from the destination server. |
| MKCOL | This section of the sample creates a folder named "foobar3" on the destination server; as far as WebDAV on IIS is concerned, the MKCOL method is a lot like the old DOS MKDIR command. |
| DELETE | This section of the sample deletes the folder from the destination server. |
using System; using System.Net; using System.IO; using System.Text; class WebDavTest { static void Main(string[] args) { try { // Define the URLs. string szURL1 = @"http://localhost/foobar1.txt"; string szURL2 = @"http://localhost/foobar2.txt"; string szURL3 = @"http://localhost/foobar3"; // Some sample text to put in text file. string szContent = String.Format( @"Date/Time: {0} {1}", DateTime.Now.ToShortDateString(), DateTime.Now.ToLongTimeString()); // Define username and password strings. string szUsername = @"username"; string szPassword = @"password"; // --------------- PUT REQUEST --------------- // // Create an HTTP request for the URL. HttpWebRequest httpPutRequest = (HttpWebRequest)WebRequest.Create(szURL1); // Set up new credentials. httpPutRequest.Credentials = new NetworkCredential(szUsername, szPassword); // Pre-authenticate the request. httpPutRequest.PreAuthenticate = true; // Define the HTTP method. httpPutRequest.Method = @"PUT"; // Specify that overwriting the destination is allowed. httpPutRequest.Headers.Add(@"Overwrite", @"T"); // Specify the content length. httpPutRequest.ContentLength = szContent.Length; // Optional, but allows for larger files. httpPutRequest.SendChunked = true; // Retrieve the request stream. Stream requestStream = httpPutRequest.GetRequestStream(); // Write the string to the destination as a text file. requestStream.Write( Encoding.UTF8.GetBytes((string)szContent), 0, szContent.Length); // Close the request stream. requestStream.Close(); // Retrieve the response. HttpWebResponse httpPutResponse = (HttpWebResponse)httpPutRequest.GetResponse(); // Write the response status to the console. Console.WriteLine(@"PUT Response: {0}", httpPutResponse.StatusDescription); // --------------- COPY REQUEST --------------- // // Create an HTTP request for the URL. HttpWebRequest httpCopyRequest = (HttpWebRequest)WebRequest.Create(szURL1); // Set up new credentials. httpCopyRequest.Credentials = new NetworkCredential(szUsername, szPassword); // Pre-authenticate the request. httpCopyRequest.PreAuthenticate = true; // Define the HTTP method. httpCopyRequest.Method = @"COPY"; // Specify the destination URL. httpCopyRequest.Headers.Add(@"Destination", szURL2); // Specify that overwriting the destination is allowed. httpCopyRequest.Headers.Add(@"Overwrite", @"T"); // Retrieve the response. HttpWebResponse httpCopyResponse = (HttpWebResponse)httpCopyRequest.GetResponse(); // Write the response status to the console. Console.WriteLine(@"COPY Response: {0}", httpCopyResponse.StatusDescription); // --------------- MOVE REQUEST --------------- // // Create an HTTP request for the URL. HttpWebRequest httpMoveRequest = (HttpWebRequest)WebRequest.Create(szURL2); // Set up new credentials. httpMoveRequest.Credentials = new NetworkCredential(szUsername, szPassword); // Pre-authenticate the request. httpMoveRequest.PreAuthenticate = true; // Define the HTTP method. httpMoveRequest.Method = @"MOVE"; // Specify the destination URL. httpMoveRequest.Headers.Add(@"Destination", szURL1); // Specify that overwriting the destination is allowed. httpMoveRequest.Headers.Add(@"Overwrite", @"T"); // Retrieve the response. HttpWebResponse httpMoveResponse = (HttpWebResponse)httpMoveRequest.GetResponse(); // Write the response status to the console. Console.WriteLine(@"MOVE Response: {0}", httpMoveResponse.StatusDescription); // --------------- GET REQUEST --------------- // // Create an HTTP request for the URL. HttpWebRequest httpGetRequest = (HttpWebRequest)WebRequest.Create(szURL1); // Set up new credentials. httpGetRequest.Credentials = new NetworkCredential(szUsername, szPassword); // Pre-authenticate the request. httpGetRequest.PreAuthenticate = true; // Define the HTTP method. httpGetRequest.Method = @"GET"; // Specify the request for source code. httpGetRequest.Headers.Add(@"Translate", "F"); // Retrieve the response. HttpWebResponse httpGetResponse = (HttpWebResponse)httpGetRequest.GetResponse(); // Retrieve the response stream. Stream responseStream = httpGetResponse.GetResponseStream(); // Retrieve the response length. long responseLength = httpGetResponse.ContentLength; // Create a stream reader for the response. StreamReader streamReader = new StreamReader(responseStream, Encoding.UTF8); // Write the response status to the console. Console.WriteLine( @"GET Response: {0}", httpGetResponse.StatusDescription); Console.WriteLine( @" Response Length: {0}", responseLength); Console.WriteLine( @" Response Text: {0}", streamReader.ReadToEnd()); // Close the response streams. streamReader.Close(); responseStream.Close(); // --------------- DELETE REQUEST --------------- // // Create an HTTP request for the URL. HttpWebRequest httpDeleteFileRequest = (HttpWebRequest)WebRequest.Create(szURL1); // Set up new credentials. httpDeleteFileRequest.Credentials = new NetworkCredential(szUsername, szPassword); // Pre-authenticate the request. httpDeleteFileRequest.PreAuthenticate = true; // Define the HTTP method. httpDeleteFileRequest.Method = @"DELETE"; // Retrieve the response. HttpWebResponse httpDeleteFileResponse = (HttpWebResponse)httpDeleteFileRequest.GetResponse(); // Write the response status to the console. Console.WriteLine(@"DELETE Response: {0}", httpDeleteFileResponse.StatusDescription); // --------------- MKCOL REQUEST --------------- // // Create an HTTP request for the URL. HttpWebRequest httpMkColRequest = (HttpWebRequest)WebRequest.Create(szURL3); // Set up new credentials. httpMkColRequest.Credentials = new NetworkCredential(szUsername, szPassword); // Pre-authenticate the request. httpMkColRequest.PreAuthenticate = true; // Define the HTTP method. httpMkColRequest.Method = @"MKCOL"; // Retrieve the response. HttpWebResponse httpMkColResponse = (HttpWebResponse)httpMkColRequest.GetResponse(); // Write the response status to the console. Console.WriteLine(@"MKCOL Response: {0}", httpMkColResponse.StatusDescription); // --------------- DELETE REQUEST --------------- // // Create an HTTP request for the URL. HttpWebRequest httpDeleteFolderRequest = (HttpWebRequest)WebRequest.Create(szURL3); // Set up new credentials. httpDeleteFolderRequest.Credentials = new NetworkCredential(szUsername, szPassword); // Pre-authenticate the request. httpDeleteFolderRequest.PreAuthenticate = true; // Define the HTTP method. httpDeleteFolderRequest.Method = @"DELETE"; // Retrieve the response. HttpWebResponse httpDeleteFolderResponse = (HttpWebResponse)httpDeleteFolderRequest.GetResponse(); // Write the response status to the console. Console.WriteLine(@"DELETE Response: {0}", httpDeleteFolderResponse.StatusDescription); } catch (Exception ex) { Console.WriteLine(ex.Message); } } }
PUT Response: Created COPY Response: Created MOVE Response: No Content GET Response: OK Response Length: 30 Response Text: Date/Time: 2/9/2010 7:21:46 PM DELETE Response: OK MKCOL Response: Created DELETE Response: OK Press any key to continue . . .